LuaComponent脚本实现

本文介绍了LuaComponent如何使Lua脚本在Unity中像C#的MonoBehaviour一样工作,强调了统一LuaState的重要性,因为不同LuaState间的脚本无法互相调用。在Lua脚本中,所有变量和方法表现为静态,导致处理多个克隆项时存在挑战。通过LuaComponent.cs,实现了Lua脚本生命周期方法,并允许C#通过LuaComponent访问Lua脚本的成员,要求Lua脚本提供一个LuaTable供C#代码交互。
摘要由CSDN通过智能技术生成

LuaComponent脚本功能让Lua脚本类似C#继承了Unity的MonoBehaviour,让Lua脚本能和C#脚本一样的在Unity中运行。

对于LuaState的使用个人觉得使用一个比较好,可能是自己对Lua的理解比较低吧,因为没有运行在同一个LuaState中的Lua脚本是不能相互调用的,完全独立运行,这样如果脚本间需要相互调用就非常麻烦。Lua脚本中所有的变量和方法都类似于C#中的静态的,这个问题就非常头疼不知道怎么处理,一个列表下有很多克隆的Item,每个Item都是挂的痛一个Lua脚本,因为变量和方法都是静态的当我需要找到其中一个Item做特殊处理时就相当麻烦。

LuaComponent.cs

using UnityEngine;
using System.Collections;
using LuaInterface;
using System.IO;


public class LuaComponent : MonoBehaviour
{
    public string luaFilePath;
    public LuaTable luaModule
    {
        get;
        private set;
    }
    public bool needRefresh = true;


    private LuaFunction luaAwakeFunc;
    private LuaFunction luaStartFunc;
    private LuaFunction luaUpdateFunc;
    private LuaFunction luaDestroyFunc;
    private LuaFunction luaOnEnableFunc;




    void Awake()
    {
        RunLuaFile(luaFilePath);
        if (luaAwakeFunc != null)
            luaAwakeFunc.Call(this.luaModule, this.gameObject);
    }


    void Start()
    {
        if (luaStartFunc != null)
            luaStartFunc.Call(this.luaModule, this.gameObject);
    }


    void OnEnable()
    {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值