diff --git a/Assets/Scripts/Framework/ScriptableObject.cs b/Assets/Scripts/Framework/ScriptableObject.cs index 3bbb336..6802e4d 100644 --- a/Assets/Scripts/Framework/ScriptableObject.cs +++ b/Assets/Scripts/Framework/ScriptableObject.cs @@ -468,7 +468,7 @@ namespace Demo public class ConsoleTool { - GameObject gameObject; + private GameObject gameObject; public ConsoleTool(GameObject gameObject) { this.gameObject = gameObject; @@ -476,39 +476,44 @@ namespace Demo public void Log(object obj) { - Debug.Log(obj); + Debug.Log(obj, gameObject); } } public IEnumerator ParseScript2Expr(string script) { IsParseScript2Expr = true; - RScriptEngine engine = new(); - RScriptImportClass importClass = new() + try { - typeof(Mathf), - typeof(RandomTool), - }; - RScriptVariables variables = new() - { - { "this", new() { data = this, type = this.GetType() } }, - { "self", new() { data = this, type = this.GetType() } }, - { "console", new() { data = new ConsoleTool(gameObject), type = typeof(ConsoleTool) } }, - { nameof(MathExtension.EaseCurveType), new() { data = PrivateType.EaseCurveTypeInstance.instance, type = typeof(PrivateType.EaseCurveTypeInstance) } }, - { $"Spline{nameof(SplineComputer.SampleMode)}", - new() { data = PrivateType.SplineComputerSampleModeInstance.instance, type = typeof(PrivateType.SplineComputerSampleModeInstance)} }, - { $"Spline{nameof(Spline.Type)}", - new() { data = PrivateType.SplineTypeInstance.instance, type = typeof(PrivateType.SplineTypeInstance)} }, - { nameof(IEffectHookObject.InteractiveEffectType), - new() { data = PrivateType.IEffectHookObjectInstance.instance, type = typeof(PrivateType.IEffectHookObjectInstance)} } - }; + RScriptEngine engine = new(); + RScriptImportClass importClass = new() + { + typeof(Mathf), + typeof(RandomTool), + }; + RScriptVariables variables = new() + { + { "this", new() { data = this, type = this.GetType() } }, + { "self", new() { data = this, type = this.GetType() } }, + { "console", new() { data = new ConsoleTool(gameObject), type = typeof(ConsoleTool) } }, + { nameof(MathExtension.EaseCurveType), new() { data = PrivateType.EaseCurveTypeInstance.instance, type = typeof(PrivateType.EaseCurveTypeInstance) } }, + { $"Spline{nameof(SplineComputer.SampleMode)}", + new() { data = PrivateType.SplineComputerSampleModeInstance.instance, type = typeof(PrivateType.SplineComputerSampleModeInstance)} }, + { $"Spline{nameof(Spline.Type)}", + new() { data = PrivateType.SplineTypeInstance.instance, type = typeof(PrivateType.SplineTypeInstance)} }, + { nameof(IEffectHookObject.InteractiveEffectType), + new() { data = PrivateType.IEffectHookObjectInstance.instance, type = typeof(PrivateType.IEffectHookObjectInstance)} } + }; - foreach (var ir in engine.RunAsync(script, importClass, variables).Yield()) - { - // using var _curr_sen = Profiler.BeginZone(engine.context.CurrentSentence.content); - yield return ir; + foreach (var ir in engine.RunAsync(script, importClass, variables).Yield()) + { + yield return ir; + } + } + finally + { + IsParseScript2Expr = false; } - IsParseScript2Expr = false; } public enum TickType @@ -576,12 +581,24 @@ namespace Demo { protected virtual IEnumerator DoSomethingDuringApplyScript() { - yield break; + return null; } [Content] public bool IsScriptApply { get; private set; } = false; + /// + /// 确认脚本已经完全执行完成, 允许其进入工作阶段 + /// 注意不要使用this.ApplyScript, 将会导致 + /// + /// while (this.IsParseScript2Expr) + /// { + /// yield return null; + /// } + /// + /// 永远等待 + /// + /// [Convention.RScript.Variable.Attr.Method] public IEnumerator ApplyScript() {