|
首先看一下C#中的方法
[Hotfix]public class HotFixMgr{ private int m_Num; private void GetSeed() { m_Num=Random.Range(1,100) }}这里定义了一个整型的数:m_num,从1~100里给它取一个随机数赋值。
如果想在Xlua中重写这个方法GetSeed。上代码示范
xlua.private_accessible(CS.HotFixMgr)xlua.hotfix(CS.HotFixMgr,'GetSeed',function(self)local c=CS.UnityEngine.Random.Range(1,100)self.m_Num=c--self.Num=CS.UnityEngine.Mathf.Floor(c)print(c)这里涉及到Unity中Random.Range的重载,它有两个方法
因为C#中分为float类型和int类型,当你输入参数时它会自动选择调用哪个。而在lua中,只有Number类型,所以在调用CS.UnityEngine.Random.Range(1,100)时,获取到的不再是一个整数,而是一个浮点数。所以这时把一个浮点类型的数赋值给整形类型的变量,就会发生错误。所以这里打印出来的m_Num始终为0,而c是一个小数。在C#中把浮点型给整型直接赋值会报错。而在lua中不会报错。
解决的办法也在上述代码中写出来了,调用Mathf中的Floor向下取整,因为lua中没有强制类型转换,所以只能通过这样来实现。当然上述方法可以用别的方式实现,这里只是分析为何会出现赋值错误的问题。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|