新公司项目是纯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()

  

tolua ios 设置 tolua教程_tolua ios 设置

这样,就完成了lua控制Unity的过程啦!