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注入(代码片段

uLua异常处理

Ulua&ToLua 调试

Java初识方法

初识OpenGL 片段着色器(Fragment Shader)