关于 Xlua 热修复时怎么调用 Unity 的自定义 C# 脚本中的字段
如题
目前我知道的有四种方法:
方法一:将C# 脚本中的字段声明成公开且静态的; 然后在 Xlua 中用 CS.该字段的类名 就可以调用该字段了。
比如:CS.类名.字段名
方法二:在xlua 脚本中将 C# 的类实例化出一个对象。。。然后就可以调用该类中的任何成员了。。。并且不需要成员是静态的,但还是需要是公开的(ulua 中其实也可以。。。但我之前一直没想到这一出。。。)
比如: CS.类名 // 是获取C#的类
CS.类名() // 就是给该类实例化一个对象了。。。。。。(卧槽,我之前一直没搞懂这一出竟然。。。)
方法三:将 C# 脚本中的字段声明成公开的; 然后在 Xlua 中的热修复方法中用 self 直接调用该字段就行了。
例子: xlua.hotfix(CS.类名,‘要修复的方法名’,function(self)
GameObject.Instantiate(self.prefab_Cube) --这里的 ‘prefab_Cube’ 表示的是C# 中的字段。
end)
需要注意的是:如果用要用 self 调用的话,那么不管我们要修复的方法是有参还是无参的,都需要将 self 传入进去。注意!这个方法需要该字段是公开类型的。
方法四:C# 脚本中的字段仍然是 私有的,调用方式跟 上面方法二一样,但是需要我们在 Xlua 中声明 授权访问该类型里的私有修饰符
xlua.private_accessible(CS.类名) -- 声明了后,我们就有了访问该类中的私有字段的权限了。然后在热修复方法中就可以正常的用 self 调用我们想要的字段了。
例子:xlua.private_accessible(CS.类名) --注意:这个是在热修复方法外声明的。
xlua.hotfix(CS.类名,‘方法名’,function(self)
GameObject.Instantiate(self.prefab_Cube) --这里的 ‘prefab_Cube’ 表示的是C# 中的字段。
end)