Files
DuckovMods/UIFrame/UIFrameAPI.cs

100 lines
3.7 KiB
C#
Raw Normal View History

2025-11-05 21:34:21 +08:00
using System.Collections.Generic;
using UIFrameAPI;
using UnityEngine;
//改为自己的命名空间更好,这是一个画布单元,一个命名空间一个画布
namespace UIFrame
{
2025-11-05 21:34:21 +08:00
//反射虽然很好用,但我认为用组件传递高效
public static class UIFrameAPI
{
2025-11-05 21:34:21 +08:00
private static UIFrameAPIComponent? _apiComponent;
private static bool createdCanvas = false;
private static readonly string NameSpace = typeof(UIFrameAPI).Namespace ?? "UIFrame";
public static Dictionary<string, Texture2D> textureCache = new Dictionary<string, Texture2D>();
public static Dictionary<string, Sprite> spriteCache = new Dictionary<string, Sprite>();
2025-11-05 21:34:21 +08:00
/// <summary>
/// 初始化API
/// </summary>
/// <returns></returns>
public static bool Initialize()
{
if (_apiComponent!=null)
return true;
_apiComponent = Object.FindObjectOfType<UIFrameAPIComponent>();
return _apiComponent;
}
/// <summary>
/// 设置标题图片(游戏中的标题是图片)
/// </summary>
/// <param name="imageFilePath">图片路径</param>
/// <returns></returns>
public static bool SetGameTitle(string imageFilePath)
{
var texture=LoadSprite(imageFilePath);
if(texture==null)
{
return false;
}
2025-11-05 21:34:21 +08:00
return _apiComponent&&_apiComponent.SetTitleImage(texture);
}
/// <summary>
/// 设置标题图片游戏中的启动界面Logo
2025-11-05 21:34:21 +08:00
/// </summary>
/// <param name="sprite">贴图</param>
/// <returns>返回false表示函数调用时设置失败之后会自动再次尝试设置</returns>
2025-11-05 21:34:21 +08:00
public static bool SetGameTitle(Sprite sprite)
{
return _apiComponent&&_apiComponent.SetTitleImage(sprite);
}
/// <summary>
/// 加载图片文件为Texture2D
/// Texture2D实际存储了图片图片的数据会上传显卡
/// 此函数默认加载后不保留内存备份,即不可读像素
/// 函数会建立文件到图片的索引缓存
/// </summary>
/// <param name="imageFilePath"></param>
/// <returns></returns>
public static Texture2D? LoadImage(string imageFilePath)
{
if (!textureCache.ContainsKey(imageFilePath))
{
var texture=_apiComponent.LoadTexture(imageFilePath);
if (texture != null)
{
textureCache[imageFilePath] = texture;
}
else
{
Debug.LogError($"加载图片:{imageFilePath}失败");
return null;
}
}
return textureCache[imageFilePath];
}
/// <summary>
/// 加载图片为Sprite
/// 直接简单的调用LoadImage再创建一个代表此图片的Sprite
/// Sprite只是表明了图片的处理方式所以为了灵活性建议自己创建
/// 此函数会缓存地址到Sprite的索引
/// </summary>
/// <param name="imageFilePath"></param>
/// <returns></returns>
public static Sprite? LoadSprite(string imageFilePath)
{
var texture=LoadImage(imageFilePath);
if (texture==null)
return null;
if (!spriteCache.ContainsKey(imageFilePath))
{
spriteCache[imageFilePath] = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
}
return spriteCache[imageFilePath];
}
}
}