关于 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)

 

posted @ 2021-03-17 23:02  半仁  阅读(164)  评论(0编辑  收藏  举报