LuaForUnity9:uLua的一個簡單實例

一、LuaScriptMgr和DoString方法

LuaScriptMgr:uLua自帶的管理器,對 LuaState 進行了封裝,而 LuaState 又是對 Lua 解析器對象的進一步封裝,LuaState 是運用的反射方式,而 LuaScriptMgr 用的是 Wrap 方式

DoString方法:載入文件並執行代碼塊,對於相同的文件每次都會執行,適用於簡單便捷的任務,和DoFile很像

一個很簡單的實例如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TextULua : MonoBehaviour
{
    private string luaText = @"
        luanet.load_assembly('UnityEngine')
        Resources = UnityEngine.Resources
        GameObject = UnityEngine.GameObject
        Vector3 = UnityEngine.Vector3
        BoxCollider = UnityEngine.BoxCollider 
        Quaternion = UnityEngine.Quaternion

        local cube = Resources.Load('Cube')    
        for i = 1, 5, 1 do
            for j = 1, 5, 1 do
                local object = GameObject.Instantiate(cube, Vector3(i, j, 0), Quaternion.identity)
                object.name = i .. j
                object:AddComponent(BoxCollider.GetClassType())
            end
        end
    ";

    void Start()
    {
        LuaScriptMgr lua = new LuaScriptMgr();
        lua.Start();
        lua.DoString(luaText);
    }
}

需要在Resources文件夾下有"Cube"預製體

 

二、生成Warp腳本

我們上面在Lua中需要用到C#中的對象,所以就必鬚生成Wrap文件,如下

在WrapFile.cs中添加

_GT(typeof(Resources)),
_GT(typeof(GameObject)),
_GT(typeof(Vector3)),
_GT(typeof(Quaternion)),

然後生成Wrap即可,注意

  • Lua 操作 C# 中的對象的使用 "." 來調出
  • 實例化出來的對象,調用對象自身的方法用 ":",如果是靜態方法還是用 ".",例如 "GameObject.Instantiate()" 

到這裏就可以運行測試了

 

三、lua腳本獨立文件

也可以在Resources文件夾下新建一個txt文件,然後通過 Resources.Load<TextAsset>("文件名") 的方法 執行lua代碼,如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TextULua: MonoBehaviour
{
    void Start()
    {
        LuaScriptMgr lua = new LuaScriptMgr();
        lua.Start();
        TextAsset luaScript = Resources.Load<TextAsset>("LuaText.lua");
        lua.DoString(luaScript.text);
    }
}

其中 LuaText.lua 中的內容就是上面 "private string luaText" 中的內容

當然,一般在正式開發中,爲了實現熱更新,Lua代碼都是需要存放於獨立的 Lua 腳本文件中的,也就是存放在 SimpleFramework 框架項目根目錄下的 Lua 文件夾中,上面的只是做測試。在使用菜單命令生成 AB 包的時候,會將該文件夾下所有的 Lua 腳本一起拷貝到 StreamingAssets 目錄下,爲下一步熱更新做準備

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章