XLua与CSharp交互的采坑点 : 热修复返回值为 Int 的CSharp方法
1、假如CS的一个类中有如下逻辑:
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using XLua; 5 6 namespace LGSTEST 7 { 8 public class Lgs : MonoBehaviour 9 { 10 void Update() 11 { 12 if (Input.GetMouseButtonDown(0)) 13 { 14 Debug.Log(GetIndex(15, 10)); 15 } 16 } 17 18 int GetIndex(int num1,int num2) 19 { 20 return num1 / num2; 21 } 22 } 23 }
现在有一个需求是:通过Xlua来更换CSharp中的 GetIndex 方法:XLua中的代码如下:
1 xlua.hotfix(CS.LGSTEST.Lgs, "GetIndex", function(this, num1, num2) 2 return num1 / num2 3 end)
有没有感觉简单?但是这样输出的结果是多少呢?实参 num1 = 15 , num2 = 10 ,按照我们的理解打印的结果应该是 1,但是事实是这样的吗?打印看看即可知道,结果如下:
没错,你没有看错,结果就是 0.具体原因是什么,其实我也不知道,我只知道怎么改,正确Xlua代码如下:
1 xlua.hotfix(CS.LGSTEST.Lgs, "GetIndex", function(this, num1, num2) 2 return math.floor(num1 / num2) 3 end)
现在的打印结果如下: