From a0bc10df4a7574811abde3746c6d7c3ca1c4ec7e Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Wed, 12 Nov 2025 11:10:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=B1=BB=E5=B7=B2=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Framework/ScriptableObject.cs | 83 ++++++++++++++++---- 1 file changed, 69 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Framework/ScriptableObject.cs b/Assets/Scripts/Framework/ScriptableObject.cs index 601fb36..f6d1f62 100644 --- a/Assets/Scripts/Framework/ScriptableObject.cs +++ b/Assets/Scripts/Framework/ScriptableObject.cs @@ -64,10 +64,10 @@ namespace Demo /// 当每次调用NextTimePoint函数时使用的单位值 /// 初始化时间 [Convention.RScript.Variable.Attr.Method] - public void ResetTimePoint(string id, string delta, string value) + public void ResetTimePoint(string id, float delta, float value) { - TimePointDelta[id] = float.Parse(delta); - TimePoints[id] = float.Parse(value); + TimePointDelta[id] = delta; + TimePoints[id] = value; } /// @@ -76,9 +76,9 @@ namespace Demo /// 时间线ID /// 前进次数,最终时间的增量为前进次数乘该时间线的单位值 [Convention.RScript.Variable.Attr.Method] - public void NextTimePoint(string id, string times) + public void NextTimePoint(string id, float times) { - TimePoints[id] += TimePointDelta[id] * float.Parse(times); + TimePoints[id] += TimePointDelta[id] * times; } /// @@ -87,9 +87,9 @@ namespace Demo /// 时间线ID /// 次数,时间线的值将被设置为次数乘该时间线的单位值 [Convention.RScript.Variable.Attr.Method] - public void SetTimePoint(string id, string value) + public void SetTimePoint(string id, float value) { - TimePoints[id] = TimePointDelta[id] * float.Parse(value); + TimePoints[id] = TimePointDelta[id] * value; } } @@ -130,9 +130,9 @@ namespace Demo /// 字符串 /// 浮点数 [Convention.RScript.Variable.Attr.Method] - public void SetContext(string name, string value) + public void SetContext(string name, float value) { - ScriptContextSpace[name] = Parse(value); + ScriptContextSpace[name] = value; } } @@ -313,9 +313,9 @@ namespace Demo /// /// 每frame帧更新一次, 等于0代表不会在状态运行 [Convention.RScript.Variable.Attr.Method] - public void SetUpdatePerFrame(string frame) + public void SetUpdatePerFrame(int frame) { - UpdatePerFrame = Mathf.Max(1, int.Parse(frame)); + UpdatePerFrame = Mathf.Max(1, frame); } } @@ -497,13 +497,68 @@ namespace Demo return child; } + /// + /// 创建无初始化脚本且无启动的子脚本对象 + /// + /// + /// + /// + [Convention.RScript.Variable.Attr.Method] + public ScriptableObject NewSubScriptWithoutInit([In] string type, [In]string name) + { + // 判断类型是否合法 + if (DefaultInstantiate.GetScriptableObjectInstantiate().TryGetValue(type, out var creater) == false) + { + Debug.LogError($"{type} is not exist or {type}'s Instantiater is not valid", this); + return null; + } + // 生成对象 + var child = creater(); + child.ScriptName = name; + child.transform.SetParent(this.transform); + child.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); + child.transform.localScale = Vector3.one; + child.EnableScript("", "", type, this); + // Add Child + Childs.Add(child); + return child; + } + + /// + /// 将无初始化创建的脚本对象确认完全加载并设置为最后添加的脚本对象 + /// + /// + /// + /// + [Convention.RScript.Variable.Attr.Method] + public ScriptableObject ApplyLoad() + { + // Load Child Script + ConventionUtility.StartCoroutine(this.LoadScript("")); + + LastLoadedScriptableObject = this; + + return this; + } + /// /// 创建不需要脚本语句的子脚本对象 /// /// 指定类型 + [Convention.RScript.Variable.Attr.Method] + public ScriptableObject NewSubScript([In] string type, [In] string name) + { + return DoGenerateSubScript(type, name, null); + } + + /// + /// 创建不需要脚本语句的子脚本对象 + /// + /// 指定类型 + [Convention.RScript.Variable.Attr.Method] public ScriptableObject NewSubScript([In] string type) { - return DoGenerateSubScript(type, $"New {type}", null); + return NewSubScript(type, $"New {type}"); } /// @@ -616,8 +671,8 @@ namespace Demo } /// - /// 使用标记可编辑脚本所能够调用的函数,并附加注释 - /// 使用标记派生类,并附加默认模板 + /// 使用标记可编辑脚本所能够调用的函数 + /// 使用标记派生类,并附加默认模板 /// public partial class ScriptableObject : SerializedMonoBehaviour, IHierarchyItemClickEventListener {