开始进行配置字段迁移

This commit is contained in:
2025-12-17 17:55:45 +08:00
parent 425198ab96
commit 3714fa87e7

View File

@@ -34,21 +34,19 @@ namespace Demo.Game
namespace ConfigType namespace ConfigType
{ {
[Serializable]
public class ScriptLoadableConfig public class ScriptLoadableConfig
{ {
public int UID = -1; [Content] public int UID = -1;
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling; [Content] public Vector3 EnterGameLocalPosition = Vector3.zero, EnterGameEulerAngles = Vector3.zero, EnterGameLocalScaling = Vector3.zero;
public bool IsSetObjectDisable; [Content] public bool IsSetObjectDisable = false;
public int UpdatePerFrame; [Content] public int UpdatePerFrame = 1;
public int ScriptUpdateCounter;
public string ScriptName;
private string[] ChildTypes;
public ScriptLoadableConfig[] childs;
public readonly static Dictionary<string, Func<ScriptLoadableConfig>> ConfigGeneraters = new() [Setting] public string ScriptName = "";
{ private string[] ChildTypes = null;
{ nameof(ScriptLoadableConfig), ()=>new ScriptLoadableConfig() }, public ScriptLoadableConfig[] childs = null;
};
[Setting] public ScriptableObject target;
public virtual void Deserialize(BinaryReader reader) public virtual void Deserialize(BinaryReader reader)
{ {
@@ -58,14 +56,15 @@ namespace Demo.Game
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader); EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
IsSetObjectDisable = BinarySerializeUtility.ReadBool(reader); IsSetObjectDisable = BinarySerializeUtility.ReadBool(reader);
UpdatePerFrame = BinarySerializeUtility.ReadInt(reader); UpdatePerFrame = BinarySerializeUtility.ReadInt(reader);
ScriptUpdateCounter = BinarySerializeUtility.ReadInt(reader);
ScriptName = BinarySerializeUtility.ReadString(reader); ScriptName = BinarySerializeUtility.ReadString(reader);
ChildTypes = BinarySerializeUtility.DeserializeStringArray(reader); ChildTypes = BinarySerializeUtility.DeserializeStringArray(reader);
int childCount = ChildTypes.Length; int childCount = ChildTypes.Length;
childs = new ScriptLoadableConfig[childCount]; childs = new ScriptLoadableConfig[childCount];
for (int i = 0; i < childCount; i++) for (int i = 0; i < childCount; i++)
{ {
childs[i] = ConfigGeneraters[ChildTypes[i]].Invoke(); var scriptObject = DefaultInstantiate.GetScriptableObjectInstantiate()[ChildTypes[i]].Invoke();
scriptObject.EnableScript(target);
childs[i] = scriptObject.Config;
childs[i].Deserialize(reader); childs[i].Deserialize(reader);
} }
} }
@@ -77,8 +76,8 @@ namespace Demo.Game
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling); BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
BinarySerializeUtility.WriteBool(writer, IsSetObjectDisable); BinarySerializeUtility.WriteBool(writer, IsSetObjectDisable);
BinarySerializeUtility.WriteInt(writer, UpdatePerFrame); BinarySerializeUtility.WriteInt(writer, UpdatePerFrame);
BinarySerializeUtility.WriteInt(writer, ScriptUpdateCounter);
BinarySerializeUtility.WriteString(writer, ScriptName); BinarySerializeUtility.WriteString(writer, ScriptName);
ChildTypes = (from child in childs select child.GetType().Name).ToArray();
BinarySerializeUtility.SerializeArray(writer, ChildTypes); BinarySerializeUtility.SerializeArray(writer, ChildTypes);
foreach (var child in childs) foreach (var child in childs)
{ {
@@ -101,13 +100,32 @@ namespace Demo.Game
/// </summary> /// </summary>
public partial class ScriptableObject public partial class ScriptableObject
{ {
[Content, SerializeField] protected virtual ConfigType.ScriptLoadableConfig MakeConfig()
private Vector3 {
EnterGameLocalPosition = Vector3.zero, return new ConfigType.ScriptLoadableConfig();
EnterGameEulerAngles = Vector3.zero, }
EnterGameLocalScaling = Vector3.one; [Setting, SerializeField] private ConfigType.ScriptLoadableConfig m_Config = null;
[Content, SerializeField] private bool IsSetObjectDisable = false; public ConfigType.ScriptLoadableConfig Config
[Content] public int UpdatePerFrame = 1; {
// 懒加载生成Config
get
{
if (m_Config == null)
{
m_Config = MakeConfig();
m_Config.target = this;
}
return m_Config;
}
}
public ConfigT GetConfig<ConfigT>() where ConfigT : ConfigType.ScriptLoadableConfig
{
return (ConfigT)Config;
}
public virtual void UpdateConfig()
{
Config.childs = (from child in this.Childs select child.Config).ToArray();
}
/// <summary> /// <summary>
/// 设置坐标 /// 设置坐标
@@ -118,7 +136,7 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void SetLocalPosition(float x, float y, float z) public void SetLocalPosition(float x, float y, float z)
{ {
EnterGameLocalPosition = new(x, y, z); Config.EnterGameLocalPosition = new(x, y, z);
} }
/// <summary> /// <summary>
/// 设置欧拉角 /// 设置欧拉角
@@ -129,7 +147,7 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void SetLocalEulerAngles(float x, float y, float z) public void SetLocalEulerAngles(float x, float y, float z)
{ {
EnterGameEulerAngles = new(x, y, z); Config.EnterGameEulerAngles = new(x, y, z);
} }
/// <summary> /// <summary>
/// 设置缩放 /// 设置缩放
@@ -140,7 +158,7 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void SetLocalScaling(float x, float y, float z) public void SetLocalScaling(float x, float y, float z)
{ {
EnterGameLocalScaling = new(x, y, z); Config.EnterGameLocalScaling = new(x, y, z);
} }
/// <summary> /// <summary>
@@ -150,7 +168,7 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void SetObjectDisable() public void SetObjectDisable()
{ {
IsSetObjectDisable = true; Config.IsSetObjectDisable = true;
} }
/// <summary> /// <summary>
@@ -161,15 +179,15 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void SetUpdatePerFrame(int frame) public void SetUpdatePerFrame(int frame)
{ {
UpdatePerFrame = Mathf.Max(1, frame); Config.UpdatePerFrame = Mathf.Max(1, frame);
} }
private void ScriptableObjectDoReset() private void ScriptableObjectDoReset()
{ {
transform.localPosition = EnterGameLocalPosition; transform.localPosition = Config.EnterGameLocalPosition;
transform.localEulerAngles = EnterGameEulerAngles; transform.localEulerAngles = Config.EnterGameEulerAngles;
transform.localScale = EnterGameLocalScaling; transform.localScale = Config.EnterGameLocalScaling;
gameObject.SetActive(IsSetObjectDisable == false); gameObject.SetActive(Config.IsSetObjectDisable == false);
} }
} }
@@ -211,7 +229,11 @@ namespace Demo.Game
public static float OneBarTime = 60; public static float OneBarTime = 60;
private bool isEnableScript = false; private bool isEnableScript = false;
public string ScriptName = ""; public string ScriptName
{
get => Config.ScriptName;
set => Config.ScriptName = value;
}
private string s_ScriptType = null; private string s_ScriptType = null;
public string m_ScriptType public string m_ScriptType
{ {
@@ -318,7 +340,7 @@ namespace Demo.Game
return result; return result;
} }
public void EnableScript(ScriptableObject parent) public void EnableScript(ScriptableObject parent,int uid = -1)
{ {
if (isEnableScript) if (isEnableScript)
{ {
@@ -342,7 +364,10 @@ namespace Demo.Game
isEnableScript = true; isEnableScript = true;
// 只有RootObject的parent会是空的 // 只有RootObject的parent会是空的
GetRoot().PushLoadedScriptObject(this); if (uid < 0)
Config.UID = GetRoot().PushLoadedScriptObject(this);
else
GetRoot().PushLoadedScriptObject(this, uid);
if (parent != null) if (parent != null)
{ {
MyHierarchyItem = parent.MyHierarchyItem.GetHierarchyItem().CreateSubPropertyItem(1)[0]; MyHierarchyItem = parent.MyHierarchyItem.GetHierarchyItem().CreateSubPropertyItem(1)[0];
@@ -531,7 +556,7 @@ namespace Demo.Game
else else
{ {
// UpdateTicks // UpdateTicks
if (ScriptUpdateCounter % UpdatePerFrame == 0) if (ScriptUpdateCounter % Config.UpdatePerFrame == 0)
UpdateTicks(currentTime, deltaTime, tickType); UpdateTicks(currentTime, deltaTime, tickType);
ScriptUpdateCounter += tickType == TickType.Update ? 1 : 0; ScriptUpdateCounter += tickType == TickType.Update ? 1 : 0;
} }
@@ -629,6 +654,7 @@ namespace Demo.Game
if (this.ScriptableObjectContents.IsCreated) if (this.ScriptableObjectContents.IsCreated)
this.ScriptableObjectContents.Dispose(); this.ScriptableObjectContents.Dispose();
} }
UpdateConfig();
IsScriptApply = true; IsScriptApply = true;
} }