ulua初识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ulua初识相关的知识,希望对你有一定的参考价值。
uLua与Unity交互
1.uLua文件夹结构
基础介绍
SimpleFramework框架项目的核心是ulua,在Unity环境下使用ulua可以实现Lua脚本与Unity内C#脚本的交互,通过Lua脚本来操作Unity3d内的各种游戏组件。
文件夹结构
1.Core:uLua核心
2.DocsLuLua文档,其实就是LuaInterface的PDF文档
3.Editor:uLua编辑器拓展
备注:项目内所有的Editor文件夹都是编辑器扩展文件夹,并不局限于根目录
4.Example:uLua自带演示案例
5.Source:cstolua核心目录
2.uLua环境下的代码交互
基础介绍
在前面的课程中在VS2015使用过LuaInterface项目中的两个DLL文件来实现C#与Lua的交互,而在ulua环境下本质也是通过LuaInterface来实现Lua与C#的交互,但是ulua对LuaInterface进行了二次封装,所以在代码书写上和原生lua稍有不同
2.C#代码中执行Lua代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface;
public class LuaForUnity : MonoBehaviour {
void Start () {
LuaState luaState = new LuaState(); //创建Lua解析器对象
luaState.DoString("print(‘Hello Unity‘)");
}
}
1.同样需要在C#中引入LuaInterface
2.原生的lua解析器对象被封装成了LuaState
3.LuaState类存在的位置是uLua/Core/Lua.cs
3.通过lua在Unity创建游戏对象
Lua代码中操作Unity内的类[反射方式/原生方式]
private string str = @"
luanet.load_assembly(‘UnityEngine‘)
GameObject = luanet.import_type(‘UnityEngine.GameObject‘)
BoxCollider = luanet.import_type(‘UnityEngine.BoxCollider‘)
local player=GameObject(‘Monkey‘)
player:AddComponent(luanet.ctype(BoxCollider))
";
LuaState luaState = new LuaState(); //创建Lua解析器对象
luaState.DoString(str);
说明
1>这种方式是我们之前在VS环境下演示的方式
2>luanet已结被封装到LuaInteface的命名空间内,所以我们可以直接在lua代码中使用luanet这个对象;
3>在Lua环境内操作C#中的类创建对象,不要写new关键字
4>在Lua环境内操作C#中类创建的对象,访问对象中的方法使用:
player:AddComponent(luanet.ctype(BoxCollider))
5>这种"反射方式"在项目开发中并不常用,但也有用武之地,真正大量使用的是wrap方式
4.Lua代码中操作Unity内的类
Wrap方式
private string str2 = @" luanet.load_assembly(‘UnityEngine‘) GameObject = UnityEngine.GameObject BoxCollider = UnityEngine.BoxCollider Animator = UnityEngine.Animator local player = GameObject(‘MKCode‘) player:AddComponent(BoxCollider.GetClassType()) player:AddComponent(Animator.GetClassType())
LuaScriptMgr lua = new LuaScriptMgr(); lua.Start(); lua.DoString(str2);
说明:
1.这种方式是ulua开发过程中最常用的方式
2.Wrap方式实现Lua调用C#,依赖的是之前生成的LuaWrap文件;
也就是我们通过Gen Lua Wrap File菜单自动生成到ulua\Source\LuaWrap下的脚本文件
首先清除Clear LuaBind File+Gen Lua Wrap FIle
3.当时用Wrap
方式时,运行Lua代码需要使用[LuaScriptMgr]
4.需要把APPConst.cs脚本中的DebugMode修改为true(否则报三个error)
5.包装新的Wrap脚本
当我们用Lua的Wrap方式访问Unity脚本组件,如果这些脚本没有自动生成“xxxxWrap”,项目运行后就会报错
比如Animator脚本,Quatertion,Vector3就没有默认生成
遇到这种情况就需要前往ulua\Editor\WrapFile.cs脚本使用_GT(typeof(Animator)),
加载
以上是关于ulua初识的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段