修正SetSprite接口绑定资源引用关系,避免0引用导致AssetBundle被释放使图片丢失。

修正SetSprite接口绑定资源引用关系,避免0引用导致AssetBundle被释放使图片丢失。
This commit is contained in:
ALEXTANG
2023-11-23 11:44:43 +08:00
parent bd0cfc5577
commit 9bcb636ed7
2 changed files with 30 additions and 5 deletions

View File

@@ -149,12 +149,14 @@ namespace TEngine
{
if (!isAsync)
{
image.sprite =
GameModule.Resource.LoadAsset<Sprite>(spriteName, customPackageName: customPackageName);
var operation = GameModule.Resource.LoadAssetGetOperation<Sprite>(spriteName, customPackageName: customPackageName);
image.sprite = operation.AssetObject as Sprite;
if (isSetNativeSize)
{
image.SetNativeSize();
}
image.gameObject.GetOrAddComponent<AssetReference>().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<AssetReference>().Reference(operation, spriteName);
}, customPackageName: customPackageName);
}
}
@@ -198,8 +202,10 @@ namespace TEngine
{
if (!isAsync)
{
spriteRenderer.sprite =
GameModule.Resource.LoadAsset<Sprite>(spriteName, customPackageName: customPackageName);
var operation = GameModule.Resource.LoadAssetGetOperation<Sprite>(spriteName, customPackageName: customPackageName);
spriteRenderer.sprite = operation.AssetObject as Sprite;
spriteRenderer.gameObject.GetOrAddComponent<AssetReference>().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<AssetReference>().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<AssetReference>();
}
}
}

View File

@@ -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;