Unity热更新方案C#Like(廿五)-实战:示范如何建立初始包CSharpLikeFreeDemo项目

本文主要是介绍Unity热更新方案C#Like(廿五)-实战:示范如何建立初始包CSharpLikeFreeDemo项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#Like是Unity的热更方案,使用纯C#语言写出可以热更新的代码,就像可以在所有平台使用DLL(动态链接库)文件一样.遵从KISS设计原则,让用户轻松构建或升级成Unity的热更新项目.

简介

本篇主要介绍如何一步一步地详细地导出初始包CSharpLikeFreeDemo项目.即配置不包含任何代码和资源的非热更新部分的环境.这里以CSharpLikeFreeDemo为示范

搭建的详细步骤

我们有了上一个代码很少的项目经验后,我们再选取一个代码比较多一些的Unity出品的免费的例子"Platformer Microgame"作为示范,即官方Demo里的"PlatformerMicrogameFree"项目是如何制作

  • 创建一个空白的2D/3D项目为CSharpLikeFreeDemo
  • 到Unity资源商店购买相关的免费资源: 如果已购买的则跳过
    • 免费购买C#Like免费版
  • 导入相关的免费资源:
    • 先打开Package Manager界面 : 菜单'Window'->'Package Manager'
    • 导入'C#Like免费版' : 'Packages: My Assets'->'C#LikeFree Hot Update Framework'->'Import'
  • 删除内置的热更新代码和资源, 确保我们初始包不包含任何'内置的例子C#Like Demo'的代码和资源
    • 删除目录'Assets\C#Like\Sample'
    • 删除目录'Assets\C#Like\HotUpdateScripts'
    • 删除场景'Assets\C#Like\Scenes\BuildInDemoScene.unity'
  • 导入我们热更游戏相关的必要的依赖库: 这个我们需要分析一下我们的热更新的游戏是需要哪些依赖库的, 而且这些依赖库是非热更新的,我们需要提前包含进初始包内
    • 如何知道我要什么依赖库呢? 打开你想要热更新的项目,菜单'Window'->'Package Manager'->'Packages:In Project', 看看里面用到哪些依赖库,然后在初始包的项目里添加进去.
    • '内置的例子C#Like Demo'并没有什么特别的依赖库
    • 'Tanks! Tutorial'用到的依赖库 :
      1. TextMeshPro
      2. 2D Sprite
      3. 2D Tilemap Eitor
      4. Multiplayer HLAPI
    • 'Platformer Microgame'用到的依赖库 :
      1. Cinemachine
      2. TextMeshPro
      3. 2D Animation
      4. 2D Pixel Perfect
      5. 2D PSD Importer
      6. 2D Sprite
      7. 2D SpriteShape
    • 合并上述的依赖库添加到我们的初始包项目中
  • 合并我们热更游戏的裁剪配置文件'link.xml'和AOT文件'AheadOfTime.cs': 点击按钮"Merge JSON manually"的时候会自动合并各项目的'link.xml'和'AheadOfTime.cs'的了
    • 'Assets/C#Like/link.xml'是防止IL2CPP的时候把我们热更新游戏需要用到的依赖库代码被裁剪掉, 因为Unity没有找到我们使用它的地方,会当做垃圾代码的裁剪掉.所以我们得告诉Unity,哪个是我需要的,千万别裁剪.
    • 'Assets/C#Like/Runtime/AheadOfTime/AheadOfTime.cs'是包含所有热更新项目里用到的类或结构体,主要用于提前注册模板类的, 防止用到的时候提示AOT异常.
    • 最终的当前项目的'Assets/C#Like/link.xml'如下:
      <linker>  <assembly fullname="System" preserve="all"></assembly>  <assembly fullname="mscorlib" preserve="all"></assembly>  <assembly fullname="Assembly-CSharp" preserve="all"></assembly>  <assembly fullname="UnityEngine" preserve="all"></assembly>  <assembly fullname="UnityEngine.CoreModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.UIModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.AudioModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.ParticleSystemModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.PhysicsModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.AnimationModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.TextRenderingModule" preserve="all"></assembly>  <assembly fullname="UnityEngine.InputLegacyModule" preserve="all"></assembly>  <assembly fullname="Unity.Postprocessing.Runtime" preserve="all"></assembly>  <assembly fullname="com.unity.multiplayer-hlapi.Runtime" preserve="all"></assembly>  <assembly fullname="Unity.TextMeshPro" preserve="all"></assembly>  
      </linker>  

  • 包含必要的Shader资源:
    • 菜单'Edit'->'Project Settings'->'Graphics->Always Included Shaders'
    • 这个看你的热更项目使用了什么Shader资源了
    • 新加2个Shader,依次为'Standard'和'Legacy Shaders/Particles/Alpha Blended Premultiply',如下图

      ...

  • 配置必要的输入: 注意不同的游戏有不同的输入设置,现在我们合并它,尽量别冲突
    • 菜单'Edit'->'Project Settings'->'Input Manager'
    • 根据不同的热更新游戏的输入,合并到本项目. 提示:可以到热更新项目里点击右键复制,然后到本项目里粘贴上去的哦

      ...

    • 注意:如果相同名字的且设置不同的,建议要换个名字哦
  • 处理WebGL下,'Tanks! Tutorial'项目AudioClip音效报错的问题: 'Platformer Microgame'的音效没问题,可能无需这种特殊处理
    • 由于WebGL加载AudioClip异常,提示FMOD错误之类的,只好改为手动加载涉及的AudioClip,代码如下:
      ResourceManager.LoadAudioClipAsync("https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/ShellExplosion.wav", AudioType.WAV, (AudioClip audioClip) =>  
      {  m_ExplosionAudio.clip = audioClip;  
      });  

    • 音效文件放到你自己的网站下载,即原游戏B的音效文件'Assets/AudioClips/*.*'(我是经过转码变小后方便下载)放到网站里下载,总共7个wav文件:
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/BackgroundMusic.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/EngineDriving.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/EngineIdle.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/ShellExplosion.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/ShotCharging.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/ShotFiring.wav
      https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles/Tank/WebGL/TankExplosion.wav

  • 修改Unity配置:
    • 打开'Assets/C#Like/Scenes/SampleScene.unity'场景
    • 菜单 'File'->'Build Settings...'
    • 点击'Add Open Scenes',令'C#Like/Scenes/SampleScene'成为'Scenes In Build'里面首个场景(而非默认的空白场景'Scenes/SampleScene')
    • 选中"WebGL"后点击"Switch Platform"按钮切换当前Platform到WebGL
    • 点击"Player Setting..."按钮,然后按需修改
      1. "Resolution and Presentation"
        • "Default Canvas Width" 600
        • "Default Canvas Height" 960
        • "Run In Background" "v"
      2. "Other Settings"
        • "Api Compatibility Level" ".NET Standard 2.0"
        • "Strip Engine Code" "v"
        • "Managed Stripping Level" "Medium"
      3. "Publishing Settings"
        • "Enable Exceptions" "Explicitly Thrown Exceptions Only"
        • "WebAssembly Arithmetic Exceptions" "Throw"
        • "Compression Format" "Gzip"
        • "Data Caching" "v"
        • "Decompression Fallback" "v"

 本系列文章导读:

  • Unity热更新方案C#Like(一)-序言
  • Unity热更新方案C#Like(二)-导出官方示范的例子,确认方案可行性
  • Unity热更新方案C#Like(三)-详解支持的C#特性:类
  • Unity热更新方案C#Like(四)-详解支持的C#特性:委托和Lambda
  • Unity热更新方案C#Like(五)-详解支持的C#特性:运算表达式
  • Unity热更新方案C#Like(六)-详解支持的C#特性:循环语法
  • Unity热更新方案C#Like(七)-详解支持的C#特性:get/set访问器
  • Unity热更新方案C#Like(八)-详解支持的C#特性:多线程
  • Unity热更新方案C#Like(九)-详解支持的C#特性:Using和命名空间
  • Unity热更新方案C#Like(十)-详解支持的C#特性:宏和区域
  • Unity热更新方案C#Like(十一)-详解支持的C#特性:枚举
  • Unity热更新方案C#Like(十二-详解支持的C#特性:参数修饰符
  • Unity热更新方案C#Like(十三)-详解支持的C#特性:函数重载和默认参数
  • Unity热更新方案C#Like(十四)-详解支持的C#特性:异常处理
  • Unity热更新方案C#Like(十五)-详解支持的C#特性:关键字:unsafe typeof nameof $ @ #pragma #warning #error
  • Unity热更新方案C#Like(十六)-详解支持的C#特性:其他杂项:初始值设定项,表达式主体,内联变量声明
  • Unity热更新方案C#Like(十七)-详解支持的长链接Socket和WebSocket
  • Unity热更新方案C#Like(十八)-详解如何和Unity交互
  • Unity热更新方案C#Like(十九)-详解KissJSON:唯一可以在本热更新框架使用的JSON库
  • Unity热更新方案C#Like(二十)-详解KissCSV:一个简易实用的CSV表格读取方式
  • Unity热更新方案C#Like(廿一)-详解KissFrameworkServer:对应的示范例子和官网所用的服务器框架
  • Unity热更新方案C#Like(廿二)-详解内置的例子C#Like Demo:飞机大战,简易聊天室,简易账号/物品/邮件系统
  • Unity热更新方案C#Like(廿三)-实战:示范如何把Unity官方免费例子Tanks! Tutorial转成可热更新项目
  • Unity热更新方案C#Like(廿四)-实战:示范如何把Unity官方免费例子Platformer Microgame转成可热更新项目
  • Unity热更新方案C#Like(廿五)-实战:示范如何建立初始包CSharpLikeFreeDemo项目
  • Unity热更新方案C#Like(廿六)-(可选)详解免费版的演示如何升级到完整版的演示

这篇关于Unity热更新方案C#Like(廿五)-实战:示范如何建立初始包CSharpLikeFreeDemo项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/499274

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化