Xlua实现代码逻辑更新

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

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

Xlua实现代码逻辑更新_第1张图片

下载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

接下来是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】的操作;

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

Xlua实现代码逻辑更新_第2张图片

你可能感兴趣的:(Lua)