From ad2bde9259a5706724c3e34739f7aede09b32eb4 Mon Sep 17 00:00:00 2001 From: liang <752284118@qq.com> Date: Thu, 5 Jun 2025 15:30:44 +0800 Subject: [PATCH] =?UTF-8?q?AssetsReference=E7=9A=84=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=94=80=E6=AF=81=E8=AE=A1=E6=95=B0=E5=A4=84=E7=90=86=E5=AE=8C?= =?UTF-8?q?=E5=96=84=EF=BC=8C=E5=85=BC=E5=AE=B9unity=20Instantiate?= =?UTF-8?q?=E5=92=8C=E4=B8=8D=E5=8F=AF=E8=A7=81=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reference/AssetsReference.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) 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) {