1. 程式人生 > >ulua初識(一)

ulua初識(一)

run hello scrip layer ima -m getclass 直接 新的

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初識(一)