unity hybird热更新实战学习 小白(一)

这篇具有很好参考价值的文章主要介绍了unity hybird热更新实战学习 小白(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.新建一个空白项目

unity hybird热更新实战学习 小白(一),学习

2.为编辑器添加IL2CPPunity hybird热更新实战学习 小白(一),学习

3.为vs2019+添加c++开发环境

unity hybird热更新实战学习 小白(一),学习

4.unity更改设置

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

5.获取hybirdcrl插件,打开packagemanager,输入url:

https://gitee.com/focus-creative-games/hybridclr_unity.git

unity hybird热更新实战学习 小白(一),学习unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

6.创建热更新文件夹,创建dll文件,在插件设置中放入

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

7.加载

unity hybird热更新实战学习 小白(一),学习

unity hybird热更新实战学习 小白(一),学习

8.代码实现:(注意代码逻辑)

(1)在asstes建立StreamingAsstes文件夹,后面用于存放热更的加载文件

最终目录如图

unity hybird热更新实战学习 小白(一),学习

其中HybridCLRGenerate是installer自动生成的

(2)进入代码,在AOT目录中建立Con**.cs和LoadDll.cs

unity hybird热更新实战学习 小白(一),学习

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ConsoleToScreen : MonoBehaviour
{
    const int maxLines = 50;
    const int maxLineLength = 120;
    private string _logStr = "";

    private readonly List<string> _lines = new List<string>();

    public int fontSize = 15;

    void OnEnable() { Application.logMessageReceived += Log; }
    void OnDisable() { Application.logMessageReceived -= Log; }

    public void Log(string logString, string stackTrace, LogType type)
    {
        foreach (var line in logString.Split('\n'))
        {
            if (line.Length <= maxLineLength)
            {
                _lines.Add(line);
                continue;
            }
            var lineCount = line.Length / maxLineLength + 1;
            for (int i = 0; i < lineCount; i++)
            {
                if ((i + 1) * maxLineLength <= line.Length)
                {
                    _lines.Add(line.Substring(i * maxLineLength, maxLineLength));
                }
                else
                {
                    _lines.Add(line.Substring(i * maxLineLength, line.Length - i * maxLineLength));
                }
            }
        }
        if (_lines.Count > maxLines)
        {
            _lines.RemoveRange(0, _lines.Count - maxLines);
        }
        _logStr = string.Join("\n", _lines);
    }

    void OnGUI()
    {
        GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity,
           new Vector3(Screen.width / 1200.0f, Screen.height / 800.0f, 1.0f));
        GUI.Label(new Rect(10, 10, 800, 370), _logStr, new GUIStyle() { fontSize = Math.Max(10, fontSize) });
    }
}
*****************************************

using HybridCLR;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;

public class LoadDll : MonoBehaviour
{

    void Start()
    {
        // Editor环境下,HotUpdate.dll.bytes已经被自动加载,不需要加载,重复加载反而会出问题。
#if !UNITY_EDITOR
        Assembly hotUpdateAss = Assembly.Load(File.ReadAllBytes($"{Application.streamingAssetsPath}/HotUpdate.dll.bytes"));
#else
        // Editor下无需加载,直接查找获得HotUpdate程序集
        Assembly hotUpdateAss = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "HotUpdate");
#endif


        Type type = hotUpdateAss.GetType("Begin");
        type.GetMethod("Startit").Invoke(null, null);
    }
}

(3)分别在场景中挂载两个脚本

unity hybird热更新实战学习 小白(一),学习

(4)在HotUpdate目录下写脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Begin
{
    public static void Startit()
    {
        Debug.Log("Hello, HybridCLR");
    }
}
 

(泛型与单例模式,泛型不需要定义量的具体类型,先构建方法,在使用的时候声明其类型,单例模式下一个类只能存在唯一的一个实体,方便其他代码访问,地位相当于中央银行)

(5)生成打包一下 点击All

unity hybird热更新实战学习 小白(一),学习

10.unity打包游戏,完成后进行文件替换,将编辑文件下的D:\unity\hytest\HybridCLRData\HotUpdateDlls\StandaloneWindows64/HotUpdate.dll,重命名为HotUpdate.dll.bytes,放到游戏生成后的目录C:\Users\creator\Desktop\hy\hytest_Data\StreamingAssets下

11.当对 Begin脚本内容进行修改时,点击ActiveBuildTarget然后再次重复操作10即可

unity hybird热更新实战学习 小白(一),学习

12.手动热更新begin的delog后,运行游戏后打印信息会更新发生变化。文章来源地址https://www.toymoban.com/news/detail-840731.html

到了这里,关于unity hybird热更新实战学习 小白(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Xlua热更新技术学习指南

    热更新是商业网络游戏必不可少的一项技术,而基于lua的热更新技术又是Unity商业网游项目中的一个主流选择。 部分同学近期表示自己在面试中被面试官提问热更新相关知识,但由于对热更新能力有所缺失,最后遗憾的与心仪工作失之交臂。 由此可见,还是有一部分同学不了

    2024年04月23日
    浏览(27)
  • 【Unity开发必备】100多个 Unity 学习网址 资源 收藏整理大全【持续更新】

    众所周知,工欲善其事必先利其器,有一个好的工具可以让我们事半功倍,有一个好用的网站更是如此! 但是好用的网站真的太多了,收藏夹都满满的(但是几乎没打开用过😁)。 所以本文是对Unity相关的网站进行一个资源整合,可以让我们更方便的去学习Unity的更多知识内容

    2024年02月16日
    浏览(43)
  • 【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

    前言 本文对 Unity引擎 的知识进行了一个整理总结,基本包含了Unity中大部分的知识介绍。 网上也有很多Unity相关的学习资料,但大多数都不成体系,学起来的时候难免会东奔西走的摸不着头脑。 本文整理的多数文章都是有对应的 系列性文章专栏 ,可以更方便的进行系统学习

    2024年02月03日
    浏览(47)
  • 学习unity需要的计算机配置及预算(更新)

    unity对电脑的配置要求还是比较高的 ,这类处理图形界面的东西都是需要消耗一些计算机资源的,但Unity的建模、蒙皮、渲染、加特效等操作是比较吃电脑配置的,所以需要的配置也相对好一些。 如果你在家使用的话建议用台式机性价比高一些,如果你用笔记本的话可以选择

    2024年02月04日
    浏览(30)
  • 【Unity 实战100例】 教程 专栏《导航目录帖》带你深入学习Unity实战经验

    📣前言 本文章为 Unity 实战100例 教程 专栏 导航帖,正在积极更新中! 本系列博客争取把Unity入门阶段的实战小项目都包含住 本专栏适用人群 :对Unity有一个基本的认识,开始上手Unity的实战内容的小伙伴。 当然你也完全可以零基础观看本系列博客 如果需要速学Unity也可以来

    2024年02月12日
    浏览(31)
  • Hybird开发,webview和H5交互

    封装一个统一的接口,供H5页面调用原生的功能,比如获取设备信息、打开相机、分享内容等。这样,H5页面只需调用这个接口,而无需关心具体的原生实现细节。 H5端调用: 直接调用API: 为了实现在 H5 页面中传递回调函数给原生代码,我们可以通过另外一种方式:使用随机

    2024年02月17日
    浏览(31)
  • 小白的初次更新------Perl教程(上)

    大家好啊,我来更新第二篇博客了,这篇博客给大家分享一下Perl的教程 分为了上中下三篇哦~~~ ✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌ 我滴主页 : ❤ ❤ ❤ 小石榴与兄棣伙的结合体(*^▽^*)_-CSDN博客  希望大家三连+关注!!! Perl 是 Practical Extrac

    2024年02月08日
    浏览(43)
  • 【Spring源码】小白速通解析Spring源码,从0到1,持续更新!

    https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q DefaultListableBeanFactory(最原始) 创建(实例化)–依赖注入–-初始化–销毁 bean–推断构造方法(默认是无参构造,或指定的构造方法)–实例化成普通对象(相当于new bean) –进行依赖注入(bean里的属性)

    2024年02月12日
    浏览(24)
  • android界面开发详解,Unity实战问题--Loading更好的实现方式,714页PDF的鸿蒙学习笔记,

    最后进度条的效果显示如下: 进度条并没有连续的显示加载的进度,而是停顿一下切换一个数字,再停顿一下切换一个数子,最后在没有显示100%就情况下就切换到主场景了。究其原因在于 Application.LoadLevelAsync 并不是真正的后台加载,它在每一帧加载一些游戏资源,并给出一个

    2024年04月26日
    浏览(26)
  • 零基础小白如何自学 Unity 游戏开发?(送 Unity 教程)

    有很多同学对 游戏开发 很感兴趣,但都不知道从何学起,缺乏目的性,往往会走不少弯路,本文正是为了帮助大家少走弯路。 “游戏开发”看似只有四个字,但涉及的内容有很多,包括 UI、建模、绘画、动画系统、粒子系统、图形学、物理系统等等。内容多需要学习的知识

    2023年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包