uLua中调用C#中的GameObject

1.C#代码

using UnityEngine;
using System.Collections;

public class LuaMono : MonoBehaviour 
{
    private static LuaMono _instance;

    public static LuaMono Instance
    {
        get
        {
            return _instance;
        }
    }

    public UILabel label;

    void Awake()
    {
        _instance = this;
        DontDestroyOnLoad( this.gameObject );
    }

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    public void setLabel( string text )
    {
        label.text = text;
    }
}

C#代码中,我们定义了一个NGUI的UILabel,并且定义了一个设置Label的方法。LuaMono是一个单例类,在Awake中初始化。同时我们对UILabel添加了get属性

2.生成的wrap文件

public static void Register(LuaState L)
	{
		L.BeginClass(typeof(LuaMono), typeof(UnityEngine.MonoBehaviour));
		L.RegFunction("setLabel", setLabel);
		L.RegFunction("__eq", op_Equality);
		L.RegFunction("__tostring", Lua_ToString);
		L.RegVar("label", get_label, set_label);
		L.RegVar("Instance", get_Instance, null);
		L.EndClass();
	}
分为:RegFunction(注册方法)和RegVar(注册成员变量)

注意,我们的成员变量,ulua默认给我们添加了get和set,提高效率。

3.如何在Lua中使用

静态方法:如Instance

LuaMono.Instance,通过点操作符来获取

非静态方法:如setLabel

LuaMono.Instance:setLabel( "From Lua" ),通过冒号操作符来获取

非静态成员变量:如label

LuaMono.Instance.label,同样使用点操作符来获取

4.设置label的text

local label1 = LuaMono.Instance.label
label1.text = "aaa"
通过Wrap文件我们知道label和text都被注册成RegVar,所以它们在Lua代码中用点操作符来获取

5.Lua代码

Hello = {}

function PrintHello( str )
	print( "我擦 " .. str )
	MyHelloWorld.Instance:ShowText() 
	LuaMono.Instance:setLabel( "From Lua" )
	local label1 = LuaMono.Instance.label
	label1.text = "aaa"
end

有一个问题,假如我在UI的Prefab上添加或者删除UIlabel或UISprite,就得重新生成wrap,这样就修改了C#代码,热更时,不是还得发版本吗?

现在有一种方案解决,但是目前自己实现有难度,大家有什么好的方法》


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值