diff --git a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/Reference/AssetsReference.cs b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/Reference/AssetsReference.cs index 5b16fb30..4563a267 100644 --- a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/Reference/AssetsReference.cs +++ b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/Reference/AssetsReference.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using UnityEngine; -using UnityEngine.Serialization; using Object = UnityEngine.Object; namespace TEngine @@ -31,6 +30,9 @@ namespace TEngine private static IResourceModule _resourceModule; + private static Dictionary _originalRefs = new(); + + private void CheckInit() { if (_resourceModule != null) @@ -60,9 +62,15 @@ namespace TEngine } } + private void Awake() { - sourceGameObject = null; + // If it is a clone, clear the reference records before cloning + if (!_originalRefs.ContainsKey(gameObject) || _originalRefs[gameObject] != this) + { + sourceGameObject = null; + refAssetInfoList?.Clear(); + } } private void OnDestroy() @@ -103,10 +111,16 @@ namespace TEngine _resourceModule = resourceModule; sourceGameObject = source; + + if (!_originalRefs.ContainsKey(gameObject)) + { + _originalRefs.Add(gameObject, this); + } + return this; } - public AssetsReference Ref(T source, IResourceModule resourceModule = null) where T : UnityEngine.Object + public AssetsReference Ref(T source, IResourceModule resourceModule = null) where T : Object { if (source == null) { @@ -155,7 +169,7 @@ namespace TEngine return comp ? comp.Ref(source, resourceModule) : instance.AddComponent().Ref(source, resourceModule); } - public static AssetsReference Ref(T source, GameObject instance, IResourceModule resourceModule = null) where T : UnityEngine.Object + public static AssetsReference Ref(T source, GameObject instance, IResourceModule resourceModule = null) where T : Object { if (source == null) {