Lua___面向对象的使用案例(XLua)

案例一:创建的类与被创建的类可以互相调用

using System;
using System.Collections.Generic;
using KEngine;
using UnityEngine;
using XLua;

namespace Game.Lua
{
    //核心是LuaTable类,通过Set()绑定,并执行Get()与之绑定的方法
    public class LuaClass
    {
        public LuaFunction AwakeFunction;
        public LuaTable LuaScript;

        public LuaClass(string luaFileName, params object[] arr)
        {
            RegisterToLuaTable(luaFileName);
            if (AwakeFunction != null) AwakeFunction.Call(arr);
        }
        
        /// <summary>
        /// 将C#的方法和属性注到LuaTable中
        /// </summary>
        /// <param name="lueFileName"></param>
        public void RegisterToLuaTable(string lueFileName)
        {
            object[] objects = null;

            objects = LuaManager.Instance.DoString(lueFileName);

            LuaScript = objects[0] as LuaTable;

            if (LuaScript == null)
            {
                Log.Error("lua script no table callback...." + lueFileName);
            }
            else
            {
                LuaScript.Set("class", this);
                LuaScript.Get("Awake", out AwakeFunction);
            }
        }
    }
}
--Class.lua
--创建lua类,每个创建的对象会自动执行Awake()方法

Class = {}

local this = Class

function this:New(className, ...)
    if className == nil then
        Log.Error("Class Constructor Is Error...")
        return nil
    end
    local luaClass = CS.Game.Lua.LuaClass(className, ...)
    this = luaClass.LuaScript
    return this
end
--开始测试

--test1.lua

require('Class')

local this = {}
local test2
function this.Start()
    test2 = Class:New("test2",this) --输出: => test2.Awke()
    test2:Pushtest1() -- 输出:test1方法被调用了
                      -- 过程:New()方法会自动test2的Awake()方法,此时打印“ => test2.Awke()”,接着test2调用了Pushtest1(),而这个里执行的是test1对象的ShowLog()方法,因此打印“test1方法被调用了”
end

function this:ShowLog()
    print("test1方法被调用了")
end

 

--test2

local this = {}
local test1
function this.Awake(...)
    test1 = ...
    print(" => test2.Awke()")
end

function this:Pushtest1()
    test1:ShowLog()
end

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值