• 大小: 4.19MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-16
  • 语言: 其他
  • 标签: unity3dlua  

资源简介

在Unity中实现一个LuaComponent来整合LUA脚本逻辑。

资源截图

代码片段和文件信息

/**
 * LUA组件:Lua游戏逻辑粘合层
 * 
 * 作者:燕良
 * 网址:http://blog.csdn.net/neil3d
 * QQ群:264656505
 * 
 */

using UnityEngine;
using System.Collections;
using LuaInterface;

/// 
/// Lua组件 - 它调用的Lua脚本可以实现类似MonoBehaviour派生类的功能
/// 

[AddComponentMenu(“Lua/LuaComponent“)]
public class LuaComponent : MonoBehaviour
{
    private static LuaState s_luaState; // 全局的Lua虚拟机

    [Tooltip(“绑定的LUA脚本路径“)]
    public TextAsset m_luascript;

    public LuaTable LuaModule
    {
        get;
        private set;
    }
    LuaFunction m_luaUpdate;    // Lua实现的Update函数,可能为null

    /// 
    /// 找到游戏对象上绑定的LUA组件(Module对象)
    /// 

    public static LuaTable GetLuaComponent(Gameobject go)
    {
        LuaComponent luaComp = go.GetComponent();
        if (luaComp == null)
            return null;
        return luaComp.LuaModule;
    }

    /// 
    /// 向一个Gameobject添加一个LUA组件
    /// 

    public static LuaTable AddLuaComponent(Gameobject go TextAsset luaFile)
    {
        LuaComponent luaComp = go.AddComponent();
        luaComp.Initilize(luaFile);  // 手动调用脚本运行,以取得LuaTable返回值
        return luaComp.LuaModule;
    }

    /// 
    /// 提供给外部手动执行LUA脚本的接口
    /// 

    public void Initilize(TextAsset luaFile)
    {
        m_luascript = luaFile;
        RunLuaFile(luaFile);

        //-- 取得常用的函数回调
        if (this.LuaModule != null)
        {
            m_luaUpdate = this.LuaModule[“Update“] as LuaFunction;
        }
    }

    /// 
    /// 调用Lua虚拟机,执行一个脚本文件
    /// 

    void RunLuaFile(TextAsset luaFile)
    {
        if (luaFile == null || string.IsNullOrEmpty(luaFile.text))
            return;

        if (s_luaState == null)
            s_luaState = new LuaState();

        object[] luaRet = s_luaState.DoString(luaFile.text luaFile.name null);
        if (luaRet != null && luaRet.Length >= 1)
        {
            // 约定:第一个返回的Table对象作为Lua模块
            this.LuaModule = luaRet[0] as LuaTable;
        }
        else
        {
            Debug.LogError(“Lua脚本没有返回Table对象:“ + luaFile.name);
        }
    }

    // MonoBehaviour callback
    void Awake()
    {
        RunLuaFile(m_luascript);
        CallLuaFunction(“Awake“ this.LuaModule this.gameobject);
    }

    // MonoBehaviour callback
    void Start()
    {
        CallLuaFunction(“Start“ this.LuaModule this.gameobject);
    }

    // MonoBehaviour callback
    void Update()
    {
        if (m_luaUpdate != null)
            m_luaUpdate.Call(this.LuaModule this.gameobject);
    }

    /// 
    /// 调用一个Lua组件中的函数
    /// 

    void CallLuaFunction(string funcName params object[] args)
    {
        if (this.LuaModule == null)
            return;

        LuaFunction func = this.LuaModule[funcName] as LuaFunction;
        if (func != null)
            func.Call(ar

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-04-11 11:30  LuaComponentDemo\
     目录           0  2015-04-11 11:32  LuaComponentDemo\Assets\
     文件        3365  2015-04-11 11:32  LuaComponentDemo\Assets\LuaComponent.cs
     文件         178  2015-04-11 11:08  LuaComponentDemo\Assets\LuaComponent.cs.meta
     文件       18636  2015-04-11 11:16  LuaComponentDemo\Assets\LuaComponentDemo.unity
     文件          90  2015-04-11 11:08  LuaComponentDemo\Assets\LuaComponentDemo.unity.meta
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\Android\
     文件     2108776  2014-03-06 04:48  LuaComponentDemo\Assets\Plugins\Android\libulua.so
     文件          90  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\Android\libulua.so.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\Android.meta
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\iOS\
     文件      349348  2014-03-06 04:48  LuaComponentDemo\Assets\Plugins\iOS\libulua.a
     文件          90  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\iOS\libulua.a.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\iOS.meta
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\
     文件        1782  2014-03-06 04:48  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Info.plist
     文件          90  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Info.plist.meta
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\MacOS\
     文件      977240  2014-03-06 04:48  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\MacOS\ulua
     文件          90  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\MacOS\ulua.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\MacOS.meta
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\
     目录           0  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\en.lproj\
     文件          92  2014-03-06 04:48  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\en.lproj\InfoPlist.strings
     文件          90  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\en.lproj\InfoPlist.strings.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\en.lproj.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents.meta
     文件         107  2015-04-11 11:07  LuaComponentDemo\Assets\Plugins\ulua.bundle.meta
............此处省略503个文件信息

评论

共有 条评论

相关资源