自定义通用配置文件(General Setting)

模板

  1. 在Project内选一个文件夹,右键菜单点击:Create/VMFramework Script Template/General Setting。

类似于 模板

示例

以新建一个玩家的全局配置文件作为示例,拆成了两个代码文件:

  • PlayerGeneralSetting.cs

  • PlayerGeneralSetting.GameEditor.cs

后者用来自定义在 游戏编辑器(Game Editor)中的显示。

代码如下所示:

https://github.com/VMware233/VMFramework/blob/main/Assets/Examples/GameLogicArchitecture/GameSetting/GeneralSetting/PlayerGeneralSetting.cs
using System;
using System.Collections.Generic;
using UnityEngine;
using VMFramework.Configuration;
using VMFramework.GameLogicArchitecture;
using VMFramework.OdinExtensions;
using VMFramework.Procedure;

namespace VMFramework.Examples
{
    public sealed partial class PlayerGeneralSetting : GeneralSetting
    {
        [field: Layer]
        [field: SerializeField]
        public int playerLayer { get; private set; }
        
        public IVectorChooserConfig<int> defaultAttack;

        protected override void OnInit()
        {
            base.OnInit();
            
            // Write your initialization code here.
        }

        protected override void GetInitializationActions(ICollection<InitializationAction> actions)
        {
            base.GetInitializationActions(actions);
            
            actions.Add(new InitializationAction(InitializationOrder.PostInit, OnPostInit, this));
        }
        
        private async void OnPostInit(Action onDone)
        {
            // Write your post-initialization code here.
            
            onDone();
        }
    }
}
https://github.com/VMware233/VMFramework/blob/main/Assets/Examples/GameLogicArchitecture/GameSetting/GeneralSetting/PlayerGeneralSetting.GameEditor.cs
#if UNITY_EDITOR
using VMFramework.Editor.GameEditor;
using VMFramework.GameLogicArchitecture;

namespace VMFramework.Examples
{
    public partial class PlayerGeneralSetting : IGameEditorMenuTreeNode
    {
        string INameOwner.Name => "Player Setting";
    }
}
#endif

自定义全局配置(Global Setting)里添加相关配置后,在游戏编辑器里如下图显示,可见出现了Player General Setting的选项,但是是空的。

这里可以用这里的工具自动创建:

创建后,左侧栏Game Setting下的Player Setting就能正常显示了。

自定义加载

一个IGeneralSetting也是一个IInitializer,所以也可以接入 游戏运行流程中(由加载器 GeneralSettingsInitializer收集)。

如果需要快速对加载的函数顺序没有特别要求,那么可以像示例PlayerGeneralSetting中一样override函数OnInit,加载器将会在GameInitializationDoneProcedure中以Init优先级调用OnInit。

如果需要在GameInitializationDoneProcedure中以其他优先级调用加载函数,比如PostInit优先级,那么可以像示例PlayerGeneralSetting中的OnPostInit函数一样,然后在GetInitializationActions函数中指定OnPostInit的优先级为PostInit。

最后更新于

这有帮助吗?