IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity XLua学习笔记(四):Hotfix热补丁 -> 正文阅读

[游戏开发]Unity XLua学习笔记(四):Hotfix热补丁

上篇文章:
Unity XLua学习笔记(三):Lua调用C#
热补丁主要作用是用Lua替换C#中的方法
在做热补丁前,需要将GitHub上下载的XLua工程中的Tools文件夹导入到项目中
在这里插入图片描述

在这里插入图片描述
导入时注意路径,需要放在Assets文件的同级路径下
在这里插入图片描述
回到Unity中,打开PlayerSettings,做如下设置
输入:HOTFIX_ENABLE
在这里插入图片描述
C#测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using XLua;
[Hotfix]
public class HotfixTestClass
{
    //构造函数
   public HotfixTestClass()
   {
       Debug.Log("HotfixTest构造函数");
   }
   public void Speak(string str)
   {
       Debug.Log(str);
   }
   //析构函数
   ~HotfixTestClass()
   {

   }
}
[Hotfix]
public class HotfixTest : MonoBehaviour
{
    
    HotfixTestClass hotTest;
    // Start is called before the first frame update
    public int[] array=new int[] {1,2,3};

    event UnityAction myEvent;
    public int Age
    {
        get
        {
            return 0;
        }
        set
        {
            Debug.Log(value);
        }
    }
    //索引器
    public int this[int index]
    {
        get{
            if(index>array.Length||index<0)
            {
                Debug.Log("索引不正确");
                return 0;
            }
            return array[index];
        }
        set
        {
            if(index>=array.Length||index<0)
            {
                Debug.Log("索引不正确");
                return;
            }
            array[index]=value;
        }
    }
    void Start()
    {
        XLuaMgr.GetInstance().Init();
        XLuaMgr.GetInstance().DoLuaFile("Main");

        Debug.Log( Add(10,20));
        Speak("dkjfalsdk");

        hotTest=new HotfixTestClass();
        hotTest.Speak("嘻嘻嘻嘻嘻");

        //StartCoroutine(TestCoroutine());
        // this.Age=100;
        // Debug.Log(this.Age);

        // this[99]=100;
        // Debug.Log(this[9999999]);

        // myEvent+=TestTest;
        // myEvent-=TestTest;

    }
    private void TestTest()
    {

    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator TestCoroutine()
    {
        while(true)
        {
            yield return new WaitForSeconds(1f);
            Debug.Log("C#协程打印一次");
        }
        

    }

    public int Add(int a,int b)
    {
        return 0;
    }
    public static void Speak(string str)
    {
        Debug.Log("哈哈哈哈");
    }
}


Lua代码

print("************第一个热补丁****************")

--直接写好代码 运行 时会报错的
--我们必须做4个非常重要的操作
--1.加特性
--2.加宏 第一次开发热补丁需要加
--3.生成代码
--4.hotfix注入 注入时可能报错 提示你要引入Tools

--热补丁的缺点:只要我们修改了热补丁类的代码,我们就需要重新执行第4步
--需要重新点击 注入

--lua当中 热补丁代码固定写法
--xlua.hotfix(类,"函数名",lua函数)

xlua.hotfix(CS.HotfixTest,"Add",function(self,a,b)
    return a+b 
end)

--静态函数 不用传第一个参数
xlua.hotfix(CS.HotfixTest,"Speak",function(a)
    print(a)
end)

在运行前,一定注意所有要进行热补丁的C#类,都要加上[Hotfix],同时执行XLua----->Generate Code,最后执行XLua-------->Hotfix Inject in Editor
只要这些被打伤特性的C#代码发生了改变,就必须重新执行XLua-------->Hotfix Inject in Editor
在这里插入图片描述
在这里插入图片描述
首先执行这两句
在这里插入图片描述
对应的Lua代码和C#代码
在这里插入图片描述
在这里插入图片描述

运行程序,C#中的方法被Lua替换了
在这里插入图片描述

Lua热补丁多函数替换

Lua代码
构造和析构函数和别的函数不同 不是替换 是先调用原逻辑 再调用Lua逻辑

xlua.hotfix(CS.HotfixTest,{
    -- Update=function(self)
    --     print(os.time())
    -- end,
    Add=function(self,a,b)
        return a+b
    end,
    Speak=function(a)
        print(a)
    end
})

xlua.hotfix(CS.HotfixTestClass,{
    --构造函数 热补丁 固定写法!!!
    --构造和析构函数和别的函数不同 不是替换 是先调用原逻辑 再调用Lua逻辑
    [".ctor"]=function()
        print("Lua热补丁构造函数")
    end,
    Speak=function(self,a)
        print("我说"..a)
    end,
    --析构函数固定写法
    Finalize=function()
        
    end
})

C#代码
HotfixTestClass类

[Hotfix]
public class HotfixTestClass
{
    //构造函数
   public HotfixTestClass()
   {
       Debug.Log("HotfixTest构造函数");
   }
   public void Speak(string str)
   {
       Debug.Log(str);
   }
   //析构函数
   ~HotfixTestClass()
   {

   }
}

HotfixTest类

[Hotfix]
public class HotfixTest : MonoBehaviour
{
    
    HotfixTestClass hotTest;
    // Start is called before the first frame update
    public int[] array=new int[] {1,2,3};

    event UnityAction myEvent;
    public int Age
    {
        get
        {
            return 0;
        }
        set
        {
            Debug.Log(value);
        }
    }
    //索引器
    public int this[int index]
    {
        get{
            if(index>array.Length||index<0)
            {
                Debug.Log("索引不正确");
                return 0;
            }
            return array[index];
        }
        set
        {
            if(index>=array.Length||index<0)
            {
                Debug.Log("索引不正确");
                return;
            }
            array[index]=value;
        }
    }
    void Start()
    {
        XLuaMgr.GetInstance().Init();
        XLuaMgr.GetInstance().DoLuaFile("Main");

        Debug.Log( Add(10,20));
        Speak("dkjfalsdk");

        hotTest=new HotfixTestClass();
        hotTest.Speak("嘻嘻嘻嘻嘻");

        //StartCoroutine(TestCoroutine());
        // this.Age=100;
        // Debug.Log(this.Age);

        // this[99]=100;
        // Debug.Log(this[9999999]);

        // myEvent+=TestTest;
        // myEvent-=TestTest;

    }
    private void TestTest()
    {

    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator TestCoroutine()
    {
        while(true)
        {
            yield return new WaitForSeconds(1f);
            Debug.Log("C#协程打印一次");
        }
        

    }

    public int Add(int a,int b)
    {
        return 0;
    }
    public static void Speak(string str)
    {
        Debug.Log("哈哈哈哈");
    }
}

unity运行打印
在这里插入图片描述

Lua热补丁替换协程函数

C#代码
在这里插入图片描述
在这里插入图片描述
lua代码
在这里插入图片描述
运行Unity打印,协程被替换
在这里插入图片描述

Lua热补丁,属性和索引器替换

C#测试代码
在这里插入图片描述
在这里插入图片描述

Lua代码
在这里插入图片描述
运行Unity打印
在这里插入图片描述

Lua热补丁,事件±替换

C#测试代码
在这里插入图片描述
在这里插入图片描述
Unity运行打印
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:15:50  更:2022-01-28 12:18:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:49:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码