require "View/Good"; luanet.load_assembly("UnityEngine"); Resources = luanet.import_type("UnityEngine.Resources"); Sprite = luanet.import_type('UnityEngine.Sprite'); GoodItem = {}; local this = GoodItem; local good;--当前盒子显示的物品 local sprite; -- UGUI上的Image组件 local number; -- UGUI上的text组件 function GoodItem.Init(go,good) -- body if(go == nil or good == nil) then return; end gameObject = go; transform = gameObject.transform; sprite = transform:FindChild("Photo"):GetComponent("Image"); number = transform:FindChild("Number"):GetComponent("Text"); print(sprite.name); print(number); -- 将Resources中的图片资源加载进来,并且赋值给UGUI中的Image sprite.overrideSprite = Resources.Load(good._icon); number.text = good._number; end
如代码中最下面的注释处,Resources.Load(good._icon);我想将指定图片名字的图片加载进来,加载没有问题,可以加载想要的图片,就是赋值一直没有反应,所以在想lua中有没有像c#脚本中那样使用as强转成Sprite类型的方法(百度了只找到了tolua.cast()这个方法,但是说我的cast是nil值,我想这是不是应该是我的是ulua环境造成的?)?所以来园子求个大神指导指导~~O(∩_∩)O谢谢
解决办法1:用c#自定义一个简单加载Resources下的Sprite的工具,如下:
using UnityEngine; using System.Collections; using UnityEngine.UI; namespace UnityEngine{ /// <summary> /// 自定义一个工具类 /// </summary> public class InstanceTool{ /// <summary> /// 加载Resources文件下制定路径及名字的Sprite图片 /// </summary> public static Sprite ResourcesSprite(string path) { return Resources.Load<Sprite>(path); } } }
然后在lua脚本中引用这个静态方法就行了
-- 引入自定义的工具类 InstanceTool = luanet.import_type('UnityEngine.InstanceTool'); --中间省略,跟原文所贴代码一样,就不贴过来了 -- 调用工具类中的加载图集的办法赋值给Image sprite.sprite = InstanceTool.ResourcesSprite( good._icon);
这样可以得到想要的结果,但问题就是:如果加载的类型太多,那工具里面就得定义很多个对应类型的加载方法。
解决这个最简单的就是引入泛型,但lua中要怎么传入泛型?又是一个问题,先学习去~~