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

ToLua 入门07_GameObject

[复制链接]
发表于 2021-8-11 17:17 | 显示全部楼层 |阅读模式
之前讲过了怎么在unity中调用lua脚本,和一些常用的使用方式;之前说到了在lua中使用协程,并在unity中使用,实际上在unity中也只是普通调用方法方式,只是在unity中做出了封装,对lua脚本中的协程进行特殊调用处理。
Lua脚本中无法直接使用unity内置的类和方法,下面我们就讲一下lua中使用unity内置对象。
大家先打开lua框架中的示范工程tolua-master\Assets\ToLua\Examples中的示范场景,可以先体验运行一下内置场景。我们打开内置的TestGameObject示范类,并对齐进行修改,修改为打开使用外部文件进行调用。修改后的脚本如下:
  1. using UnityEngine;using System.Collections;using LuaInterface;publicclassTestGameObject:MonoBehaviour{LuaState lua =null;voidStart(){#if UNITY_5 || UNITY_2017 || UNITY_2018
  2.         Application.logMessageReceived += ShowTips;#else
  3.         Application.RegisterLogCallback(ShowTips);#endifnewLuaResLoader();
  4.         lua =newLuaState();
  5.         lua.LogGC =true;
  6.         lua.Start();//添加自定义的lua脚本路径
  7.         LuaBinder.Bind(lua);//lua文件路径string fullPath = Application.dataPath +"\\ToLua/Examples/12_GameObject";//添加lua文件路径
  8.         lua.AddSearchPath(fullPath);
  9.         lua.DoFile("TestGameObject.lua");}voidUpdate(){
  10.         lua.CheckTop();
  11.         lua.Collect();}string tips ="";voidShowTips(string msg,string stackTrace,LogType type){
  12.         tips += msg;
  13.         tips +="\r\n";}voidOnApplicationQuit(){        
  14.         lua.Dispose();
  15.         lua =null;#if UNITY_5 || UNITY_2017 || UNITY_2018
  16.         Application.logMessageReceived -= ShowTips;#else
  17.         Application.RegisterLogCallback(null);#endif}voidOnGUI(){
  18.         GUI.Label(newRect(Screen.width /2-300, Screen.height /2-300,600,600), tips);}}
复制代码
LuaBinder.Bind(lua);将框架默认绑定的unity内置的模块加载进内存。
AddSearchPath 加载lua的文件夹。
lua.DoFile(“TestGameObject.lua”); 执行lua文件夹的TestGameObject.lua文件。
在代码的运行下,大家可以看见有个名字“123”的空物体对象生成,并绑定了一个默认的例子组件,然后2秒后删除。我们接下来对TestGameObject.lua文件进行分析。
  1. --引用unity内置类
  2. local Color =UnityEngine.Color
  3. local GameObject =UnityEngine.GameObject
  4. local ParticleSystem =UnityEngine.ParticleSystem
  5. function OnComplete()print('OnComplete CallBack')
  6. end                       
  7.             
  8. local go =GameObject('go')--新建go游戏对象
  9. go:AddComponent(typeof(ParticleSystem))--游戏对象添加ParticleSystem组件
  10. local node = go.transform
  11. node.position = Vector3.one --设置对象位置                 
  12. print('gameObject is: '..tostring(go))                 
  13.         
  14. GameObject.Destroy(go,2)--延迟2s删除对象               
  15. go.name ='123'--对象改名为123
复制代码
重点是引用unity内置对象,逻辑写法与在unity中用C# 一样,只是lua语法与C#不太一样。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-24 08:01 , Processed in 0.088895 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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