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 目录下,为下一步热更新做准备

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值