新公司项目是纯Lua项目,之前一直是在用C#,转Lua之后特别不习惯,所以就经常空闲时间练习联系
希望我能把自己的学习经历一直持续记录下来~
https://github.com/topameng/tolua 这是toLua作者的GitHub。
之前一直弄混淆,tolua是tolua, LuaFramework则是另一个东西,基于tolua上面封装的一层游戏开发的框架。
个人不太喜欢用别人框架的东西,感觉条条框框太过于束缚,所以我是直接学习tolua的,在framwork上花的精力并不多
第一波导入工程。 tolua下下来是一个Unity项目工程,强迫症,喜欢自己新建项目,所以是拷贝asset文件夹下的东西和asset同级的几个必要文件夹过去
首先定义一个lua加载器 LuaResLoader :
它是继承至 LuaFileUtils类 会优先读取persistentDataPath/系统/Lua 目录下的文件,未找到文件则读取 Resources/Lua 目录下文件(仍没有使用LuaFileUtil读取)。
这个类的作用是读取项目的lua文件。包括更改lua文件结构的默认读取目录以及添加额外的读取目录。如果不需要自定义,直接new出来即可。
之后是定义一个lua虚拟机,用来进行lua和C#之间的交互 LuaState lua = new LuaState();
紧接着将虚拟机绑定我们tolua转换之后的 Unity_wrap类。提供“翻译工具”,让我们的UnityAPI能在Lua项目中使用
这样 我们的lua代码环境就创建好了。
接着根据项目的需求,创建lua入口脚本
根据项目的需求,有些项目是部分lua代码,部分C#代码,有些是C#调用lua的代码,lua做主要逻辑。 有些是lua做主要逻辑,C#只是提供驱动Unity的工具。
目前我接触到的项目是是用lua做主要逻辑,C#只作为和Unity沟通的工具
OK 废话说完了,上代码
new LuaResLoader();
LuaState lua = new LuaState();
lua.Start();
LuaBinder.Bind(lua);
lua.DoFile("Main.lua");//这里的lua脚本我习惯是用tolua的mian作为入口,也可以自定义一个
这样我们的lua就可以启动啦!
接着我们可以在lua里面写一些Unity的API,进行Lua和Unity的沟通
GameObject = UnityEngine.GameObject --需要持有GameObject的引用,才能执行里面的方法
function Main()
print("logic start")
go = GameObject("Cube") --调用Unity GameObject的构造函数创建一个空物体
go.name = "lua_object"
end
Main()
这样,就完成了lua控制Unity的过程啦!