1.完成控制流label/goto的使用2.升级Parse解析器3.Judgement的还原依然存在问题
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +1,6 @@
|
|||||||
[submodule "Assets/Convention"]
|
[submodule "Assets/Convention"]
|
||||||
path = Assets/Convention
|
path = Assets/Convention
|
||||||
url = http://www.liubai.site:3000/ninemine/Convention-Unity.git
|
url = http://www.liubai.site:3000/ninemine/Convention-Unity.git
|
||||||
|
[submodule "Assets/Plugins/Flee"]
|
||||||
|
path = Assets/Plugins/Flee
|
||||||
|
url = http://www.liubai.site:3000/ninemine/Flee.git
|
||||||
|
|||||||
1
Assets/Plugins/Flee
Submodule
1
Assets/Plugins/Flee
Submodule
Submodule Assets/Plugins/Flee added at a09b3c1eb1
@@ -4,6 +4,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Convention;
|
using Convention;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Editor
|
namespace Demo.Editor
|
||||||
{
|
{
|
||||||
@@ -18,9 +19,12 @@ namespace Demo.Editor
|
|||||||
private static void WriteCPPClassBase(StreamWriter stream, Type currentType)
|
private static void WriteCPPClassBase(StreamWriter stream, Type currentType)
|
||||||
{
|
{
|
||||||
if (currentType == typeof(ScriptableObject))
|
if (currentType == typeof(ScriptableObject))
|
||||||
{
|
{
|
||||||
|
// <20><><EFBFBD>ƹ<EFBFBD><C6B9>ߺ<EFBFBD>
|
||||||
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
|
stream.WriteLine("#define __build_in_pragma #");
|
||||||
|
stream.WriteLine("#define __build_in_to_text(x) #x");
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ඨ<EFBFBD><E0B6A8><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>
|
||||||
|
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
{
|
{
|
||||||
foreach (var type in asm.GetTypes())
|
foreach (var type in asm.GetTypes())
|
||||||
{
|
{
|
||||||
@@ -36,11 +40,31 @@ namespace Demo.Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// <20><><EFBFBD><EFBFBD>Mathf
|
||||||
stream.Write(@"/*
|
foreach (var method in typeof(Mathf).GetMethods())
|
||||||
|
{
|
||||||
|
stream.WriteLine($"#define {method.Name}({string.Join(',', from param in method.GetParameters() select param.Name)})");
|
||||||
|
}
|
||||||
|
// <20><><EFBFBD><EFBFBD>label<65><6C>goto
|
||||||
|
stream.Write(@"
|
||||||
|
/*
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ
|
||||||
|
*/
|
||||||
|
");
|
||||||
|
stream.Write($"#define label(label_name) __build_in_pragma define label_name\n\n");
|
||||||
|
stream.Write(@"
|
||||||
|
/*
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>a>bʱ<62><CAB1>ת<EFBFBD><D7AA>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>label<65><6C>
|
||||||
|
*/
|
||||||
|
");
|
||||||
|
stream.Write($"#define goto(a,b,label_name)\n\n");
|
||||||
|
// <20><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||||
|
stream.Write(@"
|
||||||
|
/*
|
||||||
<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ
|
<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ
|
||||||
e.g: LoadSubScript(SplineCore, ""SplineCore.h"") with(r = 1, g = 1, b = 1);
|
e.g: LoadSubScript(SplineCore, ""SplineCore.h"") with(r = 1, g = 1, b = 1);
|
||||||
*/");
|
*/
|
||||||
|
");
|
||||||
stream.Write($"#define with(...)\n\n");
|
stream.Write($"#define with(...)\n\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -56,9 +80,6 @@ e.g: LoadSubScript(SplineCore, ""SplineCore.h"") with(r = 1, g = 1, b = 1);
|
|||||||
{
|
{
|
||||||
if (name == nameof(ScriptableObject.LoadSubScript))
|
if (name == nameof(ScriptableObject.LoadSubScript))
|
||||||
{
|
{
|
||||||
stream.WriteLine("#define __build_in_pragma #");
|
|
||||||
stream.WriteLine("#define __build_in_to_text(x) #x");
|
|
||||||
|
|
||||||
stream.Write("/*\n" + description + "\n*/\n");
|
stream.Write("/*\n" + description + "\n*/\n");
|
||||||
stream.Write($"#define {name}({string.Join(',', paramList)}) __build_in_pragma include {paramList.ToArray()[1]}\n\n");
|
stream.Write($"#define {name}({string.Join(',', paramList)}) __build_in_pragma include {paramList.ToArray()[1]}\n\n");
|
||||||
//stream.Write($"#define {name}({string.Join(',', paramList)})\n\n");
|
//stream.Write($"#define {name}({string.Join(',', paramList)})\n\n");
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -8,6 +9,7 @@ using System.Text.RegularExpressions;
|
|||||||
using Convention;
|
using Convention;
|
||||||
using Convention.WindowsUI.Variant;
|
using Convention.WindowsUI.Variant;
|
||||||
using Demo.Game;
|
using Demo.Game;
|
||||||
|
using Flee.PublicTypes;
|
||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
using Unity.Profiling;
|
using Unity.Profiling;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@@ -374,10 +376,11 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上下文系统
|
||||||
|
/// </summary>
|
||||||
public partial class ScriptableObject
|
public partial class ScriptableObject
|
||||||
{
|
{
|
||||||
// 上下文系统
|
|
||||||
|
|
||||||
[Content] public Dictionary<string, float> ScriptContextSpace = new();
|
[Content] public Dictionary<string, float> ScriptContextSpace = new();
|
||||||
|
|
||||||
public bool GetCompleteScriptContext(string key, out float value)
|
public bool GetCompleteScriptContext(string key, out float value)
|
||||||
@@ -391,6 +394,19 @@ namespace Demo
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GetCompleteScriptContext(ref Dictionary<string, float> context)
|
||||||
|
{
|
||||||
|
var current = this;
|
||||||
|
while (current != null)
|
||||||
|
{
|
||||||
|
foreach (var key in current.ScriptContextSpace.Keys)
|
||||||
|
{
|
||||||
|
context[key] = current.ScriptContextSpace[key];
|
||||||
|
}
|
||||||
|
current = current.Parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置局部上下文变量,将会传递给子物体使用
|
/// 设置局部上下文变量,将会传递给子物体使用
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -405,16 +421,28 @@ namespace Demo
|
|||||||
")]
|
")]
|
||||||
public void SetContext(string name, string value)
|
public void SetContext(string name, string value)
|
||||||
{
|
{
|
||||||
ScriptContextSpace[name] = float.Parse(value);
|
ScriptContextSpace[name] = Parse(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 数值解析工具
|
||||||
|
/// </summary>
|
||||||
public partial class ScriptableObject
|
public partial class ScriptableObject
|
||||||
{
|
{
|
||||||
// 数值解析工具
|
private ExpressionContext ExpressionParserCreater()
|
||||||
|
{
|
||||||
private readonly Dictionary<string, DDT> DDTCache = new();
|
ExpressionContext context = new();
|
||||||
|
context.Imports.AddType(typeof(Mathf));
|
||||||
|
Dictionary<string, float> vars = new();
|
||||||
|
GetCompleteScriptContext(ref vars);
|
||||||
|
foreach (var item in vars)
|
||||||
|
{
|
||||||
|
context.Variables[item.Key] = item.Value;
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
}
|
||||||
public static float OneBarTime = 1;
|
public static float OneBarTime = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -428,6 +456,10 @@ namespace Demo
|
|||||||
public float Parse(string value)
|
public float Parse(string value)
|
||||||
{
|
{
|
||||||
value = value.Trim();
|
value = value.Trim();
|
||||||
|
if(value.StartsWith("\"")&&value.EndsWith("\""))
|
||||||
|
{
|
||||||
|
value = value[1..^1];
|
||||||
|
}
|
||||||
if (TimePoints.TryGetValue(value, out var result))
|
if (TimePoints.TryGetValue(value, out var result))
|
||||||
return result;
|
return result;
|
||||||
if (GetCompleteScriptContext(value, out result))
|
if (GetCompleteScriptContext(value, out result))
|
||||||
@@ -435,15 +467,19 @@ namespace Demo
|
|||||||
if(value.EndsWith(']'))
|
if(value.EndsWith(']'))
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
Regex regex = new(@"^(.+)\[(\d+)\]$");
|
Regex regex = new(@"^(.+)\[(.+)\]$");
|
||||||
var match = regex.Match(value);
|
var match = regex.Match(value);
|
||||||
if (match.Success)
|
if (match.Success)
|
||||||
{
|
{
|
||||||
if (FindWithPath(match.Groups[1].Value) is DDT ddt)
|
return (FindWithPath(match.Groups[1].Value) as DDT).Datas[(int)this.Parse(match.Groups[2].Value)];
|
||||||
{
|
}
|
||||||
DDTCache[match.Groups[1].Value] = ddt;
|
}
|
||||||
}
|
{
|
||||||
return DDTCache[match.Groups[1].Value].Datas[int.Parse(match.Groups[2].Value)];
|
Regex regex = new(@"^(.+)\[\]$");
|
||||||
|
var match = regex.Match(value);
|
||||||
|
if (match.Success)
|
||||||
|
{
|
||||||
|
return (FindWithPath(match.Groups[1].Value) as DDT).Datas.Count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new ArgumentException("value is end by ']' but not match on any invlid parse");
|
throw new ArgumentException("value is end by ']' but not match on any invlid parse");
|
||||||
@@ -465,23 +501,34 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return float.Parse(value);
|
if (float.TryParse(value, out var _result))
|
||||||
|
return _result;
|
||||||
|
else
|
||||||
|
return ExpressionParserCreater().CompileGeneric<float>(value).Evaluate();
|
||||||
}
|
}
|
||||||
catch
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
throw new FormatException($"{value} is not support any Parser");
|
throw new FormatException($"{value} is not support any Parser", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected T ConvertValue<T>(string str)
|
||||||
|
{
|
||||||
|
return ConventionUtility.convert_xvalue<T>(str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 先天支持的工具函数
|
||||||
|
/// </summary>
|
||||||
public partial class ScriptableObject
|
public partial class ScriptableObject
|
||||||
{
|
{
|
||||||
// 先天支持的工具函数
|
|
||||||
|
|
||||||
[Content, SerializeField] private Vector3
|
[Content, SerializeField] private Vector3
|
||||||
EnterGameLocalPosition = Vector3.zero,
|
EnterGameLocalPosition = Vector3.zero,
|
||||||
EnterGameEulerAngles = Vector3.zero,
|
EnterGameEulerAngles = Vector3.zero,
|
||||||
EnterGameLocalScaling = Vector3.one;
|
EnterGameLocalScaling = Vector3.one;
|
||||||
|
[Content, SerializeField] private bool IsSetObjectDisable = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置坐标
|
/// 设置坐标
|
||||||
@@ -538,13 +585,6 @@ namespace Demo
|
|||||||
EnterGameLocalScaling = new(Parse(x), Parse(y), Parse(z));
|
EnterGameLocalScaling = new(Parse(x), Parse(y), Parse(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void ResetEnterGameStatus()
|
|
||||||
{
|
|
||||||
transform.localPosition = EnterGameLocalPosition;
|
|
||||||
transform.localEulerAngles = EnterGameEulerAngles;
|
|
||||||
transform.localScale = EnterGameLocalScaling;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 关闭该物体,
|
/// 关闭该物体,
|
||||||
/// 在面对如多Game场景时关闭某些GameWorld中默认存在的全局灯光等场景时非常有用
|
/// 在面对如多Game场景时关闭某些GameWorld中默认存在的全局灯光等场景时非常有用
|
||||||
@@ -557,10 +597,24 @@ namespace Demo
|
|||||||
")]
|
")]
|
||||||
public void SetObjectDisable()
|
public void SetObjectDisable()
|
||||||
{
|
{
|
||||||
gameObject.SetActive(false);
|
IsSetObjectDisable = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetScriptableObjectEnterGameStatus()
|
||||||
|
{
|
||||||
|
transform.localPosition = EnterGameLocalPosition;
|
||||||
|
transform.localEulerAngles = EnterGameEulerAngles;
|
||||||
|
transform.localScale = EnterGameLocalScaling;
|
||||||
|
if (IsSetObjectDisable)
|
||||||
|
{
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// UpdatePerFrame相关
|
||||||
|
/// </summary>
|
||||||
public partial class ScriptableObject
|
public partial class ScriptableObject
|
||||||
{
|
{
|
||||||
[Content] public int UpdatePerFrame = 1;
|
[Content] public int UpdatePerFrame = 1;
|
||||||
@@ -584,47 +638,13 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>使用<see cref="ScriptableCallAttribute"/>标记可编辑脚本所能够调用的函数,并附加注释</para>
|
/// EnableScript相关
|
||||||
/// <para>使用<see cref="DefaultScriptAttribute"/>标记派生类,并附加默认模板</para>
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class ScriptableObject : SerializedMonoBehaviour, IHierarchyItemClickEventListener
|
public partial class ScriptableObject
|
||||||
{
|
{
|
||||||
|
|
||||||
public static Dictionary<string, Type> FastScriptableObjectTypen = new();
|
|
||||||
public static bool IsAutoPlay = false;
|
|
||||||
|
|
||||||
public string SourcePath = "";
|
|
||||||
public string ScriptName = "";
|
|
||||||
public string ScriptPath;
|
|
||||||
public string ScriptTypename;
|
|
||||||
private bool isEnableScript = false;
|
private bool isEnableScript = false;
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
public ProfilerMarker s_PreparePerfMarker;
|
|
||||||
#endif
|
|
||||||
public ScriptableObject Parent;
|
|
||||||
|
|
||||||
public RootObject GetRoot()
|
|
||||||
{
|
|
||||||
if (Parent == null)
|
|
||||||
return this as RootObject;
|
|
||||||
if (Parent is RootObject result)
|
|
||||||
return result;
|
|
||||||
else return Parent.GetRoot();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ScriptableObject> Childs = new();
|
|
||||||
|
|
||||||
// Hierarchy
|
|
||||||
|
|
||||||
public PropertiesWindow.ItemEntry MyHierarchyItem;
|
|
||||||
public static PropertiesWindow.ItemEntry AllScriptableObjectCounterHierarchyItem;
|
|
||||||
public static int AllScriptableObjectCounter = 0;
|
|
||||||
|
|
||||||
// Cache
|
|
||||||
|
|
||||||
public static Dictionary<Type, Dictionary<string, MemberInfo>> MethodInvokerCache = new();
|
|
||||||
|
|
||||||
public void EnableScript(string sourcePath, string scriptPath, string scriptType, ScriptableObject parent)
|
public void EnableScript(string sourcePath, string scriptPath, string scriptType, ScriptableObject parent)
|
||||||
{
|
{
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
@@ -660,6 +680,57 @@ namespace Demo
|
|||||||
// parentHierarchyItem.GetPropertyListItem().RefreshChilds();
|
// parentHierarchyItem.GetPropertyListItem().RefreshChilds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool EnsureEnableScript()
|
||||||
|
{
|
||||||
|
if (isEnableScript == false)
|
||||||
|
{
|
||||||
|
Debug.LogError("ScriptableObject is currently disableScript", this);
|
||||||
|
}
|
||||||
|
return isEnableScript;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>使用<see cref="ScriptableCallAttribute"/>标记可编辑脚本所能够调用的函数,并附加注释</para>
|
||||||
|
/// <para>使用<see cref="DefaultScriptAttribute"/>标记派生类,并附加默认模板</para>
|
||||||
|
/// </summary>
|
||||||
|
public partial class ScriptableObject : SerializedMonoBehaviour, IHierarchyItemClickEventListener
|
||||||
|
{
|
||||||
|
|
||||||
|
public static Dictionary<string, Type> FastScriptableObjectTypen = new();
|
||||||
|
public static bool IsAutoPlay = false;
|
||||||
|
|
||||||
|
public string SourcePath = "";
|
||||||
|
public string ScriptName = "";
|
||||||
|
public string ScriptPath;
|
||||||
|
public string ScriptTypename;
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public ProfilerMarker s_PreparePerfMarker;
|
||||||
|
#endif
|
||||||
|
public ScriptableObject Parent;
|
||||||
|
|
||||||
|
public RootObject GetRoot()
|
||||||
|
{
|
||||||
|
if (Parent == null)
|
||||||
|
return this as RootObject;
|
||||||
|
if (Parent is RootObject result)
|
||||||
|
return result;
|
||||||
|
else return Parent.GetRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ScriptableObject> Childs = new();
|
||||||
|
|
||||||
|
// Hierarchy
|
||||||
|
|
||||||
|
public PropertiesWindow.ItemEntry MyHierarchyItem;
|
||||||
|
public static PropertiesWindow.ItemEntry AllScriptableObjectCounterHierarchyItem;
|
||||||
|
public static int AllScriptableObjectCounter = 0;
|
||||||
|
|
||||||
|
// Cache
|
||||||
|
|
||||||
|
public static Dictionary<Type, Dictionary<string, MemberInfo>> MethodInvokerCache = new();
|
||||||
|
|
||||||
public const string RootObjectQuickPath = "project/";
|
public const string RootObjectQuickPath = "project/";
|
||||||
|
|
||||||
public ScriptableObject FindWithPath(string path, bool isMustExist = true)
|
public ScriptableObject FindWithPath(string path, bool isMustExist = true)
|
||||||
@@ -790,8 +861,6 @@ namespace Demo
|
|||||||
yield return LoadSubScriptAsync(type, path, null);
|
yield return LoadSubScriptAsync(type, path, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public object DynamicBindingTarget { get; protected set; } = null;
|
|
||||||
|
|
||||||
private enum ParseStats
|
private enum ParseStats
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
@@ -899,8 +968,8 @@ namespace Demo
|
|||||||
if (a > b)
|
if (a > b)
|
||||||
{
|
{
|
||||||
commandIterator = commandLabels[words[2]];
|
commandIterator = commandLabels[words[2]];
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
@@ -988,15 +1057,6 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool EnsureEnableScript()
|
|
||||||
{
|
|
||||||
if (isEnableScript == false)
|
|
||||||
{
|
|
||||||
Debug.LogError("ScriptableObject is currently disableScript", this);
|
|
||||||
}
|
|
||||||
return isEnableScript;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Content] private bool IsEnableUpdate = false;
|
[Content] private bool IsEnableUpdate = false;
|
||||||
|
|
||||||
public virtual IEnumerator LoadScript(string script)
|
public virtual IEnumerator LoadScript(string script)
|
||||||
@@ -1043,10 +1103,9 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
this.isEnableScript = false;
|
this.isEnableScript = false;
|
||||||
this.Parent = null;
|
this.Parent = null;
|
||||||
DynamicBindingTarget = null;
|
|
||||||
this.name = "<Unload>";
|
this.name = "<Unload>";
|
||||||
// 清理Cache
|
// 清理Cache
|
||||||
DDTCache.Clear();
|
//
|
||||||
// 减数
|
// 减数
|
||||||
AllScriptableObjectCounter--;
|
AllScriptableObjectCounter--;
|
||||||
AllScriptableObjectCounterHierarchyItem.GetHierarchyItem().text = $"ScriptableObjectCount: {AllScriptableObjectCounter}";
|
AllScriptableObjectCounterHierarchyItem.GetHierarchyItem().text = $"ScriptableObjectCount: {AllScriptableObjectCounter}";
|
||||||
@@ -1099,9 +1158,9 @@ namespace Demo
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected T ConvertValue<T>(string str)
|
public virtual void ResetEnterGameStatus()
|
||||||
{
|
{
|
||||||
return ConventionUtility.convert_xvalue<T>(str);
|
ResetScriptableObjectEnterGameStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnHierarchyItemRightClick(RectTransform item)
|
public virtual void OnHierarchyItemRightClick(RectTransform item)
|
||||||
|
|||||||
Reference in New Issue
Block a user