lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考链接:

https://www.jianshu.com/p/07dc38e85923

https://www.cnblogs.com/zwywilliam/p/5999924.html

 

一.创建Vector3

在xlua中,创建Vector3有2种方式

1.使用userdata,即通过c#中new一个Vector3,然后返回给lua。例如:CS.UnityEngine.Vector3(20, 30, 40)

2.使用lua的table,此时不会和c#进行交互,例如Vector3.New(10, 11, 12)

 

二.获取Vector3

例如local pos = transform.position,这个过程和上面创建Vector3的第一种方法是一样的

 

三.设置Vector3

在xlua中,设置Vector3也有2种方式,和上面创建Vector3是对应的

1.使用userdata,例如b.transform.position = CS.UnityEngine.Vector3(20, 30, 40)

2.使用lua的table,例如b.transform.position = Vector3.New(10, 11, 12)

 

四.xlua中对Vector3等结构体的优化

需要配置GCOptimize属性,实际上常用的UnityEngine命名空间下的几个结构体,都配置了该属性。如果不配置该属性,生成的代码在传递这些结构体时,会有装箱拆箱的操作,从而导致gc

 

五.Vector3优化方案总结

1.使用lua的table来实现Vector3,减少与c#的交互

2.使用静态方法, 因为使用实例方法例如gameObject.transform.position,像gameObject、transform在lua中是一个userdata,传到c#中会找到对应的c#对象,这过程中涉及到查找原表、查找c#对象、返回userdata等等的操作,比较繁琐耗时

3.通过传递3个数字x,y,z来代替传递1个table,即传递简单类型的参数来代替复杂类型的参数

 

posted on 2020-02-02 22:40  艰苦奋斗中  阅读(559)  评论(0编辑  收藏  举报