Unity通过Dll热更新

Demo资源

1.需要创建一个.NET Framework 3.5 类库

在这里插入图片描述

2.在解决方案资源管理器中添加引用Unity3个Dll文件

UnityEngine
UnityEngine.CoreModule
UnityEngine.UI
在这里插入图片描述

3.在类中引用UnityEngine和 UnityEngine.UI类继承MonoBehaviour就能正常编写程序了

在这里插入图片描述

4.编写完程序点击生成然后生成解决方案

在这里插入图片描述
5.找到生成的Dll文件在解决方案资源管理器中右键项目选择在文件资源管理器中打开文件夹然后选择bin文件夹然后是Debug找到dll
在这里插入图片描述
在这里插入图片描述

6.打开Unity把刚才的dll文件导入并且修改后缀名为bytes打成AssetBundle包
转载AssetBundle教程
AssetBundle打包工具
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
7.通过加载ab包将资源转换为文本文件然后转换成byte数组在反射成组件挂载到物体上去就可以实现热更新了

/*****************************************************
    文件:TestDlll.cs
    版本:01
    作者:GZL
    功能:测试加载dll热更新
*****************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.UI;
public class TestDll : MonoBehaviour
{
    public Text text_1;
    public TextAsset loadABTextFile;
    void Awake()
    {
        text_1.text = Application.streamingAssetsPath + "/Dll/dlltest.ab";
        LoadDllAB(text_1.text, "DllTest");//ab包路径  dll工程名
        AddMyComponent("DllTest.Class1", this.gameObject); //dll工程名.类名  要将这个组件挂载的物体
    }
    void LoadDllAB(string path, string dllName)
    {
        AssetBundle ab = AssetBundle.LoadFromFile(path);//加载本地AB包内容
        loadABTextFile = ab.LoadAsset(dllName, typeof(TextAsset)) as TextAsset;
    }
    void AddMyComponent(string className, GameObject Modes)
    {
        byte[] by = loadABTextFile.bytes;
        Assembly am = Assembly.Load(by);
        Type type = am.GetType(className);
        Modes.AddComponent(type);
    }
}

在这里插入图片描述
8.一切准备就绪后运行就会发现指定物体上挂载了指定的组件后续修改的换去类库修改逻辑后在重复上面的操作替换ab包就行了
在这里插入图片描述
这里还是建议用lua做热更新,这个只是学习探索,而且性能比较慢因为用的是反射,而且后面要在去操作这个动态挂的组件都要写成反射的方式,而且一套操作比较繁琐

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值