找回密码
 立即注册
查看: 200|回复: 0

toLua学习笔记十——lua调用C#的类

[复制链接]
发表于 2022-11-27 13:47 | 显示全部楼层 |阅读模式
toLua访问C#的类,固定套路 命名空间.类名,比如GameObject,在lua中调用就是UnityEngine.GameObject。
1、通过C#实例化一个对象,因为lua中没有new,所以我们直接使用类名()来实例化对象。
  1. local obj1 = UnityEngine.GameObject()local obj2 = UnityEngine.GameObject("Master_Xue")
复制代码
2、在使用中,为了方便实用并且节约性能,我们通常定义全局变量来存储我们C#中的类
  1. GameObject = UnityEngine.GameObject
复制代码
使用方式如下:
  1. local obj3 =GameObject("Master_Xue3")
复制代码
3、类中的静态对象都可以通过.来调用,静态对象的成员变量也是直接对象.属性的方式来获取。
  1. local obj4 = GameObject.Find("Master_Xue")print(obj4.transform.position.x)
复制代码
4、需要注意的是,部分类例如Debug默认使用会报错,因为我们没有把他们加入到CustomSetting文件中,
在使用时,需要将其加入到CustomSetting中的BindType[] customTypeList中。
  1. _GT(typeof(Debug)),
复制代码
之后点击lua->Generate all生成文件之后即可正常使用
  1. Debug = UnityEngine.Debug
  2. Debug.Log(obj4.transform.position.x)
复制代码
5、如果要使用成员方法,一定要用:
  1. Vector3 = UnityEngine.Vector3
  2. obj4.transform:Translate(Vector3.right)
  3. Debug.Log(obj4.transform.position.x)
复制代码
6、继承了Mono的类不能直接new的,通过Gameobject的Addcomponent方法添加脚本,同样需要将其加入到CustomSetting中的BindType[] customTypeList中。
  1. local obj5 =GameObject("加脚本测试")
  2. obj5:AddComponent(typeof(LuaCallCSharp))
复制代码
7、没有继承Mono的类,依然需要将其加入到CustomSetting中的BindType[] customTypeList中。
  1. publicclassTest{publicvoidSpeak(string str){
  2.         Debug.Log("Test:"+str);}}namespace Master_Xue{publicclassTest2{publicvoid Speak (string str){
  3.             Debug.Log("Test2:"+str);}}}
复制代码
  1. local t1 =Test()
  2. t1:Speak("t1说话")local t2 = Master_Xue.Test2()
  3. t2:Speak("t2说话")
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 18:56 , Processed in 0.158398 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表