diff --git a/UnityProject/Assets/TEngine/Runtime/Extension/UnityExtension.cs b/UnityProject/Assets/TEngine/Runtime/Extension/UnityExtension.cs index 7e6a7127..dbea4fb3 100644 --- a/UnityProject/Assets/TEngine/Runtime/Extension/UnityExtension.cs +++ b/UnityProject/Assets/TEngine/Runtime/Extension/UnityExtension.cs @@ -149,12 +149,14 @@ namespace TEngine { if (!isAsync) { - image.sprite = - GameModule.Resource.LoadAsset(spriteName, customPackageName: customPackageName); + var operation = GameModule.Resource.LoadAssetGetOperation(spriteName, customPackageName: customPackageName); + image.sprite = operation.AssetObject as Sprite; if (isSetNativeSize) { image.SetNativeSize(); } + + image.gameObject.GetOrAddComponent().Reference(operation, spriteName); } else { @@ -162,14 +164,16 @@ namespace TEngine { if (image == null) { + operation.Dispose(); + operation = null; return; } - image.sprite = operation.AssetObject as Sprite; if (isSetNativeSize) { image.SetNativeSize(); } + image.gameObject.GetOrAddComponent().Reference(operation, spriteName); }, customPackageName: customPackageName); } } @@ -198,8 +202,10 @@ namespace TEngine { if (!isAsync) { - spriteRenderer.sprite = - GameModule.Resource.LoadAsset(spriteName, customPackageName: customPackageName); + var operation = GameModule.Resource.LoadAssetGetOperation(spriteName, customPackageName: customPackageName); + spriteRenderer.sprite = operation.AssetObject as Sprite; + + spriteRenderer.gameObject.GetOrAddComponent().Reference(operation, spriteName); } else { @@ -207,10 +213,13 @@ namespace TEngine { if (spriteRenderer == null) { + operation.Dispose(); + operation = null; return; } spriteRenderer.sprite = operation.AssetObject as Sprite; + spriteRenderer.gameObject.GetOrAddComponent().Reference(operation, spriteName); }, customPackageName: customPackageName); } } @@ -281,5 +290,15 @@ namespace TEngine return null; } + + public static AssetReference GetAssetReference(this GameObject gameObject) + { + if (gameObject == null) + { + return null; + } + + return gameObject.GetComponent(); + } } } \ No newline at end of file diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs index 0364329a..7a73b985 100644 --- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs +++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs @@ -59,6 +59,12 @@ namespace TEngine public void Bind(AssetOperationHandle operation, string assetLocation, AssetReference parent = null, string packageName = "") { + if (_operationHandle != null) + { + Log.Warning($"rebind AssetReference gameObject.name:{gameObject.name} assetLocation:{assetLocation}"); + _operationHandle.Dispose(); + _operationHandle = null; + } _operationHandle = operation; this._assetLocation = assetLocation; this._packageName = packageName;