AlicizaX/Client/Packages/com.alicizax.unity.resource/Runtime/Resource/Reference/AssetsSetHelper.cs

152 lines
5.2 KiB
C#
Raw Normal View History

2025-04-28 19:45:45 +08:00
using AlicizaX;
2025-01-23 19:06:48 +08:00
using UnityEngine;
using UnityEngine.UI;
namespace AlicizaX.Resource.Runtime
{
public static class AssetsSetHelper
{
2025-04-28 19:45:45 +08:00
private static IResourceModule _resourceModule;
2025-01-23 19:06:48 +08:00
private static void CheckResourceManager()
{
2025-04-28 19:45:45 +08:00
if (_resourceModule == null)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
_resourceModule = ModuleSystem.GetModule<IResourceModule>();
2025-01-23 19:06:48 +08:00
}
}
#region SetMaterial
public static void SetMaterial(this Image image, string location, bool isAsync = false, string packageName = "")
{
if (image == null)
{
throw new GameFrameworkException($"SetSprite failed. Because image is null.");
}
CheckResourceManager();
if (!isAsync)
{
2025-04-28 19:45:45 +08:00
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
2025-01-23 19:06:48 +08:00
image.material = material;
AssetsReference.Ref(material, image.gameObject);
}
else
{
2025-04-28 19:45:45 +08:00
_resourceModule.LoadAsset<Material>(location, material =>
2025-01-23 19:06:48 +08:00
{
if (image == null || image.gameObject == null)
{
2025-04-28 19:45:45 +08:00
_resourceModule.UnloadAsset(material);
2025-01-23 19:06:48 +08:00
material = null;
return;
}
image.material = material;
AssetsReference.Ref(material, image.gameObject);
}, packageName);
}
}
public static void SetMaterial(this SpriteRenderer spriteRenderer, string location, bool isAsync = false, string packageName = "")
{
if (spriteRenderer == null)
{
throw new GameFrameworkException($"SetSprite failed. Because image is null.");
}
CheckResourceManager();
if (!isAsync)
{
2025-04-28 19:45:45 +08:00
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
2025-01-23 19:06:48 +08:00
spriteRenderer.material = material;
AssetsReference.Ref(material, spriteRenderer.gameObject);
}
else
{
2025-04-28 19:45:45 +08:00
_resourceModule.LoadAsset<Material>(location, material =>
2025-01-23 19:06:48 +08:00
{
if (spriteRenderer == null || spriteRenderer.gameObject == null)
{
2025-04-28 19:45:45 +08:00
_resourceModule.UnloadAsset(material);
2025-01-23 19:06:48 +08:00
material = null;
return;
}
spriteRenderer.material = material;
AssetsReference.Ref(material, spriteRenderer.gameObject);
}, packageName);
}
}
public static void SetMaterial(this MeshRenderer meshRenderer, string location, bool needInstance = true, bool isAsync = false, string packageName = "")
{
if (meshRenderer == null)
{
throw new GameFrameworkException($"SetSprite failed. Because image is null.");
}
CheckResourceManager();
if (!isAsync)
{
2025-04-28 19:45:45 +08:00
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
2025-01-23 19:06:48 +08:00
meshRenderer.material = needInstance ? Object.Instantiate(material) : material;
AssetsReference.Ref(material, meshRenderer.gameObject);
}
else
{
2025-04-28 19:45:45 +08:00
_resourceModule.LoadAsset<Material>(location, material =>
2025-01-23 19:06:48 +08:00
{
if (meshRenderer == null || meshRenderer.gameObject == null)
{
2025-04-28 19:45:45 +08:00
_resourceModule.UnloadAsset(material);
2025-01-23 19:06:48 +08:00
material = null;
return;
}
meshRenderer.material = needInstance ? Object.Instantiate(material) : material;
AssetsReference.Ref(material, meshRenderer.gameObject);
}, packageName);
}
}
public static void SetSharedMaterial(this MeshRenderer meshRenderer, string location, bool isAsync = false, string packageName = "")
{
if (meshRenderer == null)
{
throw new GameFrameworkException($"SetSprite failed. Because image is null.");
}
CheckResourceManager();
if (!isAsync)
{
2025-04-28 19:45:45 +08:00
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
2025-01-23 19:06:48 +08:00
meshRenderer.sharedMaterial = material;
AssetsReference.Ref(material, meshRenderer.gameObject);
}
else
{
2025-04-28 19:45:45 +08:00
_resourceModule.LoadAsset<Material>(location, material =>
2025-01-23 19:06:48 +08:00
{
if (meshRenderer == null || meshRenderer.gameObject == null)
{
2025-04-28 19:45:45 +08:00
_resourceModule.UnloadAsset(material);
2025-01-23 19:06:48 +08:00
material = null;
return;
}
meshRenderer.sharedMaterial = material;
AssetsReference.Ref(material, meshRenderer.gameObject);
}, packageName);
}
}
#endregion
}
}