用lua对unity的UI进行更新, 有一个需求是点击一下UI图片, 就改变该图片的sprite.
在用lua写的时候, 如果直接用Resource.Load方法的返回值对image的sprite进行复制的话会报错, 因为Resource.Load方法的返回值类型是Terxture2D类型, 无法直接对sprite类型进行赋值.
在C#中可以使用Resource.Load<Sprite>("资源路径")将类型强转为Sprite, 但lua中没有泛型, 解决思路是在C#中另写一个转换类型的脚本, 再在lua中调用该脚本.
C#脚本(非原创, 参考链接:https://q.cnblogs.com/q/97431/):
namespace UnityEngine{
/// <summary>
/// 自定义一个工具类
/// </summary>
public class InstanceTool{
/// <summary>
/// 加载Resources文件下制定路径及名字的Sprite图片
/// </summary>
public static Sprite ResourcesSprite(string path)
{
return Resources.Load<Sprite>(path);
}
}
}
lua中调用:
local InstanceTool = CS.UnityEngine.InstanceTool
image.sprite = InstanceTool.ResourcesSprite("资源路径");
有一种不用创建C#脚本的方式, 见https://blog.csdn.net/oncruise/article/details/95352337