自定义通用配置文件(General Setting)
模板
在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。
最后更新于
这有帮助吗?