Xlua实现代码逻辑更新

之前有写过资源的热更新,但是没有去涉及到lua代码,今天写了个小demo去简单实现一下代码逻辑的更新。

点击按钮,生成一个白色Cube,通过xlua给c#打补丁,让其生成一个蓝色的比例是原来三倍的Cube。

下载Xlua压缩包,将xlua 导入到unity工程目录下,之前的文章有讲过怎么导入。提前在发布之前,给C#中的类之后可能要修改的打上hotfix标签,方法打上LuaCallCSharp或者CSharpCallLua标签,方便之后打补丁。

下面是c#  实现的简单逻辑:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XLua;
[Hotfix]
public class TestXlua : MonoBehaviour
{
    public GameObject CubePre;

    LuaEnv env;
    private Button _testBtn;
    GameObject obj;
    private void Awake()
    {
        env = new LuaEnv();
        _testBtn = GameObject.Find("Button").GetComponent<Button>();
        _testBtn.onClick.AddListener(OnClickEvent);
        _testBtn.onClick.AddListener(ChangeColor);
        env.DoString("require 'TestDemo'");
    }


     [LuaCallCSharp]
    public void OnClickEvent()
    {
       obj= Instantiate(CubePre, new Vector3(0, 1, 0),Quaternion.identity);
       
    }
    [LuaCallCSharp]
    public void ChangeColor()
    {
        if (obj!=null)
        {
            obj.GetComponent<MeshRenderer>().material.color = Color.red;
        }
    }

    private void Destroy()
    {
        _testBtn.onClick.RemoveAllListeners();
        env.Dispose();
    }

}

接下来是Lua代码,一些基本注意事项,要注意方法的调用: 调用不需要传入self参数,点调用要传入self参数,使用unity中的类要加CS前缀,util库 可以先执行c# 中的指定方法中的逻辑,在执行lua代码。

local util=require 'util'
util.hotfix_ex(CS.TestXlua,'OnClickEvent',function(self)
	 self.OnClickEvent(self)
	 self.obj.transform.localScale =CS.UnityEngine.Vector3(3,3,3)
end)

xlua.hotfix(CS.TestXlua,'ChangeColor',function(self)
	if self.obj~=nil then
	   self.obj:GetComponent('MeshRenderer').material.color =CS.UnityEngine.Color.blue;

	end
end)

要修的两个方法。

每次修改C#代码要重新生成代码,注入。如果不想每次都去生成,可以考虑先不开启宏,等发布的时候在开启。

这里说明一下,如果只开启一个宏HOTFIX_ENABLE,在unity编辑器下是没问题的,可以生成也可以注入。但是发布到移动端就会出现问题,在切换到安卓端之后,运行就会报错

LuaException: xlua.access, no field __Hotfix0_Update
stack traceback:
    [C]: in field 'access'
    [string "Init"]:88: in field 'hotfix'

所以还要开启一个宏: INJECT_WITHOUT_TOOL,采用内嵌到编辑器的方式注入。添加了该宏之后,在菜单栏XLUA里才能够进行【Hotfix inject in Editor】的操作;

之后再次打包到移动端,测试没问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值