欢迎加入Unity业内qq交流群:956187480



需要注意的几点:

----------------------------------------------------------------------------------------------------

一:获取属性

lua访问c#脚本内的字段

方法1.可以在lua代码内通过“self.字段名”进行访问,但是字段必须是public修饰的。弊端破坏了c#的封装性

xlua.hotfix(CS.CreateWall,'Createwall',function(self)
for i = 0 ,3,1 do
for j = 0,3,1 do
GameObject.Instantiate(self.prefabsCube,Vector3(i,j,0),Quaternion.identity);
end
end
end)

方法2.在lua语言中使用代码获取c#类中private成员的访问权,xlua.private_assessible(CS.类名)。

这样就可以在lua脚本中访问到c#类当中的私有成员。

--获取目标类的权限
xlua.private_assessible(CS.CreateWall)
xlua.hotfix(CS.CreateWall,'Createwall',function(self)
for i = 0 ,3,1 do
for j = 0,3,1 do
GameObject.Instantiate(self.prefabsCube,Vector3(i,j,0),Quaternion.identity);
end
end
end)

---------------------------------------------------------------------------------------------------

二:黑名单添加

编译时候提示错误:Assets/XLua/Gen/UnityEngineLightWrap.cs(723,60): error CS1061: Type `UnityEngine.Light' does not contain a definition for `shadowRadius' and no extension method `shadowRadius' of type

解决方案:在Assets\XLua\Src\Editor\Generator.cs 中GetGenConfig函数中添加黑名单,然后执行菜单xlua ->Clear Generator code ,再执行xlua ->Generator code

public static void GetGenConfig(IEnumerable<Type> check_type)
{
BlackList = new List<List<string>>(){
new List<string>(){"UnityEngine.Light", "shadowRadius"},
new List<string>(){"UnityEngine.Light", "shadowAngle"},
..
};
}

三:只更新部分逻辑

找到util.lua文件,放到你自己的lua加载路径

local util = require 'util'
util.hotfix_ex(CS.SnakeHead,'Die',function(self)
self.Die(self)

UnityEngine.Debug.Log("补充更新")
end)

 

 


欢迎加入Unity业内qq交流群:956187480