找回密码
 立即注册
查看: 297|回复: 0

XLUA --随机数问题

[复制链接]
发表于 2021-8-13 20:06 | 显示全部楼层 |阅读模式
首先看一下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中没有强制类型转换,所以只能通过这样来实现。当然上述方法可以用别的方式实现,这里只是分析为何会出现赋值错误的问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 08:34 , Processed in 0.090485 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表