项目后期Lua接入笔记03--LuaBehaviour设计

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出来。

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