Unity是组件式开发,脚本继承自monobehaviour,然后挂在在gameobject上来驱动游戏,沿着这条思路,我们设计一个自己的behaviour来驱动lua脚本。
using UnityEngine;
using LuaInterface;
public class LuaMono : MonoBehaviour
{
public string ModualName;
public LuaTable Table { get; private set; }
private LuaFunction m_awakeFunc;
private LuaFunction m_startFunc;
private LuaFunction m_enableFunc;
private LuaFunction m_disableFunc;
private LuaFunction m_destroyFunc;
private LuaFunction m_clickFunc;
private void Awake()
{
if (Table == null)
{
object[] objs = LuaManager.Instance.DoFile(ModualName);
Table = objs[0] as LuaTable;
if (Table == null)
{
Debug.LogError("cant find lua table");
}
}
GetFunction();
if (m_awakeFunc != null)
{
m_awakeFunc.Call(gameObject);
}
}
protected virtual void GetFunction()
{
m_awakeFunc = Table.GetLuaFunction("Awake");
m_startFunc = Table.GetLuaFunction("Start");
m_enableFunc = Table.GetLuaFunction("OnEnable");
m_disableFunc = Table.GetLuaFunction("OnDisable");
m_destroyFunc = Table.GetLuaFunction("OnDestroy");
m_clickFunc = Table.GetLuaFunction("OnClick");
}
private void Start()
{
if (m_startFunc != null)
{
m_startFunc.Call();
}
}
private void OnEnable()
{
if (m_enableFunc != null)
{
m_enableFunc.Call();
}
}
private void OnDisable()
{
if (m_disableFunc != null)
{
m_disableFunc.Call();
}
}
private void OnClick()
{
if (m_clickFunc != null)
{
m_clickFunc.Call();
}
}
private void OnDestroy()
{
if (m_destroyFunc != null)
{
m_destroyFunc.Call();
}
}
private void Reset()
{
ModualName = gameObject.name;
}
}
我们在一开始的时候获取luaTable,所有lua脚本的最后我们要把luaTable return出来。