152 lines
5.2 KiB
C#
152 lines
5.2 KiB
C#
using AlicizaX;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AlicizaX.Resource.Runtime
|
|
{
|
|
public static class AssetsSetHelper
|
|
{
|
|
private static IResourceModule _resourceModule;
|
|
|
|
private static void CheckResourceManager()
|
|
{
|
|
if (_resourceModule == null)
|
|
{
|
|
_resourceModule = ModuleSystem.GetModule<IResourceModule>();
|
|
}
|
|
}
|
|
|
|
#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)
|
|
{
|
|
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
|
|
image.material = material;
|
|
AssetsReference.Ref(material, image.gameObject);
|
|
}
|
|
else
|
|
{
|
|
_resourceModule.LoadAsset<Material>(location, material =>
|
|
{
|
|
if (image == null || image.gameObject == null)
|
|
{
|
|
_resourceModule.UnloadAsset(material);
|
|
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)
|
|
{
|
|
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
|
|
spriteRenderer.material = material;
|
|
AssetsReference.Ref(material, spriteRenderer.gameObject);
|
|
}
|
|
else
|
|
{
|
|
_resourceModule.LoadAsset<Material>(location, material =>
|
|
{
|
|
if (spriteRenderer == null || spriteRenderer.gameObject == null)
|
|
{
|
|
_resourceModule.UnloadAsset(material);
|
|
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)
|
|
{
|
|
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
|
|
meshRenderer.material = needInstance ? Object.Instantiate(material) : material;
|
|
AssetsReference.Ref(material, meshRenderer.gameObject);
|
|
}
|
|
else
|
|
{
|
|
_resourceModule.LoadAsset<Material>(location, material =>
|
|
{
|
|
if (meshRenderer == null || meshRenderer.gameObject == null)
|
|
{
|
|
_resourceModule.UnloadAsset(material);
|
|
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)
|
|
{
|
|
Material material = _resourceModule.LoadAsset<Material>(location, packageName);
|
|
meshRenderer.sharedMaterial = material;
|
|
AssetsReference.Ref(material, meshRenderer.gameObject);
|
|
}
|
|
else
|
|
{
|
|
_resourceModule.LoadAsset<Material>(location, material =>
|
|
{
|
|
if (meshRenderer == null || meshRenderer.gameObject == null)
|
|
{
|
|
_resourceModule.UnloadAsset(material);
|
|
material = null;
|
|
return;
|
|
}
|
|
|
|
meshRenderer.sharedMaterial = material;
|
|
AssetsReference.Ref(material, meshRenderer.gameObject);
|
|
}, packageName);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|