Unity通过Dll热更新

2023-11-12

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做热更新,这个只是学习探索,而且性能比较慢因为用的是反射,而且后面要在去操作这个动态挂的组件都要写成反射的方式,而且一套操作比较繁琐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity通过Dll热更新 的相关文章

  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • UI自动化测试的正确姿势 —— Airtest设备连接&API详解第一篇

    一 背景 Airtest作为一款优秀的自动化测试工具 有着强大的API功能 处理日常自动化测试过程中需要的各类操作 今天就给大家逐一介绍关于设备连接和常用API部分 结合自动化测试中的各类需求 看看如何通过使用Airtest来快速实现 二
  • 「盘点」界面控件DevExtreme UI v23.1中的API增强

    DevExtreme gt https www evget com product 3150 拥有高性能的HTML5 JavaScript小部件集合 使您可以利用现代Web开发堆栈 包括React Angular ASP NET Core
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • APP UI自动化测试思路总结

    首先想要说明一下 APP自动化测试可能很多公司不用 但也是大部分自动化测试工程师 高级测试工程师岗位招聘信息上要求的 所以为了更好的待遇 我们还是需要花时间去掌握的 毕竟谁也不会跟钱过不去 接下来 一起总结一下APP UI自动化测试的思路吧
  • WPF-UI HandyControl 控件简单实战

    文章目录 前言 UserControl简单使用 新建项目 直接新建项目 初始化UserControl Geometry 矢量图形 额外Icon导入
  • 【自动化测试】selenium元素定位方式大全!

    前言 当我们在使用selenium进行自动化测试工作时 元素定位是非常重要的一环 因为我们是借助脚本模拟我们通过鼠标和键盘对元素进行点击 输入内容和滑动操作的 所以准确的元素定位是我们执行测试脚本的重要一环 本文就来给大家介绍一下selen
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 创意无限,绘图轻松——Sketch for Mac矢量绘图软件全面介绍

    在现代设计领域 矢量绘图软件是设计师们必不可少的工具之一 而在众多矢量绘图软件中 Sketch for Mac凭借其强大的功能和友好的用户界面脱颖而出 成为众多设计师的首选 Sketch for Mac是一款专为Mac用户开发的矢量绘图软件
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • element ui弹窗在别的弹窗下方,优先级不高的问题

    在 弹窗 的标签中加入append to body即可解决该问题
  • Mac版 Photoshop 2021---PS2021

    Adobe Photoshop 2021是一款强大的图像处理软件 它可以帮助用户进行各种图像编辑 修饰和合成工作 这款软件拥有先进的图像处理技术 支持多种图像格式 可以轻松实现各种复杂的图像处理任务 它还提供了丰富的滤镜和工具 使用户可以自
  • HarmonyOS鸿蒙开发指南:容器组建 stepper开发指导

    目录 创建Stepper组件 设置index属性 设置样式 添加事件 场景示例 创建Stepper组件 在pages index目录下的hml文件中创建一个Stepper组件 div class container div
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • Linux——HTTP协议

    超文本传输协议 HTTP HyperText Transfer Protocol 互联网上应用最为广泛的一种网络协议 所有的WWW文件都必须遵守这个标准 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 之所以叫做超文本 是
  • Golang 几个不错的实用函数库

    文章目录 samber lo thoas go funk duke git lancet elliotchance pie gookit goutil dablelv cyan 大咖好呀 我是恋喵大鲤鱼 Golang 标准库是 Go 语言自
  • pointer-like classes 开放智能指针

    template
  • darktrace 亮点是使用的无监督学习

    https blog csdn net weixin 34337265 article details 86020998 转载于 https www cnblogs com diyunpeng p 11611392 html
  • Numpy计算分母为n-1的修正方差(贝塞尔校正)

    对于一个序列值 import numpy as np arr value np array 1 2 3 通常方法 一般的计算方法计算的方差 0 666666666 计算公式如下 s 2 1
  • 【牛客网华为机试】HJ32 密码截取

    题目 描述 Catcher是MCA国的情报员 他工作时发现敌国会用一些对称的密码进行通信 比如像这些ABBA ABA A 123321 但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解 比如进行下列变化 ABBA gt 12AB
  • css怎样去除表格内边距,CSS语言border-spacing表格边距控制

    在前面我看讲过表格的边框分离与合并 现在就给大家讲下表格分离后如何用CSS语言中的border spacing属性控制表格间的宽度 语法 border spacing px px 说明 border spacing第一个是水平间隔 第二个是
  • C++内存布局和内存分配

    看了很多 收集若干篇 内存布局1 内存布局2 内存分配 内存布局图解析 mmap内存映射 brk内存分配原理 拓展 从内核文件系统看文件的读写过程 栈溢出 一般都是临时变量给的太大超过8MB
  • 初识c语言(上)

    目录 前言 什么是C语言 第一个C语言代码 通用类型 如何定义变量与常量 结束 前言 本篇只对C语言做基础的介绍 对C语言基础有个大概的了解 一 什么是c语言 C语言是门语言 就像人与人之间交流用汉语 英语 法语等等 而C语言是实现人机交流
  • PHP发送邮件(PHPMailer)

    作为PHP入门开发者 常常有这种述求 自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法 用于诸如给用户发送验证码 通知信息等 比如 我的某个用户注册模块 需要使用register jjonline cn作为邮件发
  • 你真的了解 Synchronized 吗?

    前言 Synchronized想必大家在工作中一定有接触过 它算是Java并发场景下实现多线程安全一种比较直接的操作 有人会说它慢 确实 在JDK1 6之前 它有另一个名称叫做 重量级锁 但是从1 6版本起 它就在不断被优化 现如今已经是很
  • /usr/bin/ld: libx264.a(dct-a.o): relocation R_X86_64_32 against `.rodata‘ can not be used when makin

    最近在编译x264的时候出现了错误 usr bin ld libx264 a dct a o relocation R X86 64 32 against rodata can not be used when making a PIE o
  • package.json详解

    在package json中配置环境变量 scripts dev cross env NODE ENV development platform h5 webpack mode development config webpack conf
  • 【华为诺亚方舟实验室】2022届毕业生招聘--决策(强化学习)推理方向

    深度强化学习实验室 官网 http www neurondance com 论坛 http deeprl neurondance com 来源 华为诺亚方舟实验室官微 诺亚方舟实验室 Noah s Ark Lab 是华为公司从事人工智能基础
  • Redis系列之基础知识

    文章目录 一 Redis是什么 Redis架构 二 为什么使用Redis 三 Redis支持的数据类型 四 Redis支持的特殊数据结构 五 Redis持久化 RDB Redis DataBase AOF Append Only File
  • C++ 实验五 NO.1 定义一个student类包含成员变量姓名,年龄,学号,用多文件组织类, 在student类中重载构造函数,用多种方式对该类的对象初始化

    文章目录 题目 main cpp student cpp student h course cpp course h 运行结果 题目 程序作者 冰糖 章 节 实验五 最后修改日期 2019年3月31日 题 目 实验目的 1 掌握类的定义 根
  • 微信错误码:"errcode":40003 解决方法汇总

    一 问题描述 最近公司在搞微信小程序开发 然后自己负责一个小程序的模板消息发送 调用其中的 https api weixin qq com cgi bin message wxopen template send access token
  • 静态链接与动态链接的区别

    我们大家在编程过程中对 链接 这个词并不陌生 链接所解决的问题即是将我们自己写的代码和别人写的库集成在一起 链接可以分为静态链接与动态链接 下文将分别讲解这两种方式的特点与其区别 静态链接 特点 在生成可执行文件的时候 链接阶段 把所有需要
  • 学习Java虚拟机的正确的姿势?

    为什么要学习Java虚拟机 多线程和虚拟机 实际工作中 大部分程序员可能几乎不用 但这两项技能是你面试所谓高级工程师的敲门砖 也是你在机会到来的时候能否顶上去的弹药库 很多人 把这两部看的太高深 望而却步 我觉得一个重要原因就是大部分博客和
  • Unity通过Dll热更新

    Demo资源 1 需要创建一个 NET Framework 3 5 类库 2 在解决方案资源管理器中添加引用Unity3个Dll文件 UnityEngine UnityEngine CoreModule UnityEngine UI 3 在