资源简介
在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.me
文件 18636 2015-04-11 11:16 LuaComponentDemo\Assets\LuaComponentDemo.unity
文件 90 2015-04-11 11:08 LuaComponentDemo\Assets\LuaComponentDemo.unity.me
目录 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.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\Android.me
目录 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.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\iOS.me
目录 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.me
目录 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.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\MacOS.me
目录 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.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources\en.lproj.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents\Resources.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\ulua.bundle\Contents.me
文件 107 2015-04-11 11:07 LuaComponentDemo\Assets\Plugins\ulua.bundle.me
............此处省略503个文件信息
- 上一篇:redis开发与运维实践指南
- 下一篇:频率特性测试仪四篇
评论
共有 条评论