Unity热更新方案C#Like(廿四)-实战:示范如何把Unity官方免费例子Platformer Microgame转成可热更新项目

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

简介

本篇主要介绍如何一步一步地详细地把Unity官方免费例子Platformer Microgame转成可热更新项目.

搭建的详细步骤

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

  • 创建一个空白的2D/3D项目为PlatformerMicrogameFree
  • 到Unity资源商店购买相关的免费资源: 如果已购买的则跳过
  • 导入相关的免费资源:
    • 先打开Package Manager界面 : 菜单'Window'->'Package Manager'
    • 导入'Platformer Microgame' : 'Packages: My Assets'->'Platformer Microgame'->'Import'
    • 导入'C#Like免费版' : 'Packages: My Assets'->'C#LikeFree Hot Update Framework'->'Import'
  • 移除默认导出C#Like内置资源的AssetBundle: 你也可以直接删掉它
    • Project面板选中"Assets\C#Like\Scenes\BuildInDemoScene"文件后, 在Inspector面板里的Asset Labels的AssetBundle设置为none
    • Project面板选中"Assets\C#Like\Sample"目录后, 在Inspector面板里的Asset Labels的AssetBundle设置为none
  • 修改产品名称:
    • 菜单'Edit'->'Project Settings'->'Player'->'Product Name' 设置为 'MicrogameFree'
  • 修改脚本:
    • 为'Assets\Mod Assets\Mod Resources\Scripts\Platformer\EmitParticlesOnLand.cs'这个文件加个命名空间,例如'Platformer.Mechanics'. 因为热更脚本里的类不能使用和没有命名空间的类名取相同的名字,例如非热更脚本里有个不带命名空间的类叫'ClassName', 热更新脚本里不能存在命名空间不同但类名相同的类'NamespaceName.ClassName',所以建议所有的类都加上命名空间吧.
    • 复制目录'Assets\Scripts' 到 'Assets\Scripts_HotUpdate'. 即我们将要把原来目录'Assets\Scripts'里的非热更脚本改成目录'Assets\Scripts_HotUpdate'里的热更新脚本
    • 菜单'Window'->'C#Like'->'C#Like Setting'->'Hot Update Script Folder' 设置为 'Assets\Scripts_HotUpdate'
    • 然后我们逐一地把修改目录'Assets\Scripts_HotUpdate'里的所有cs脚本文件: 最终改好后的脚本文件详见GitHub里的PlatformerMicrogameFree项目,篇幅问题,不一一列出完整代码了,下面简述一些注意的事项
      • 把原命名空间(例如'Platformer.Gameplay'之类的)都改为'Microgame'.这个纯粹看你个人爱好,没限定改成什么.
      • 把基类'MonoBehaviour'的都改为'LikeBehaviour'
      • 按需确定要采用不同的HotUpdateBehaviourXXXXX.
      • 根据绑定不同需求,在Awake或Start里绑定预制体里的数据 (int/bool/double/float/string/Color/Vector3/GameObject/TextAsset/Material/Texture/AudioClip/Sprite)
      • 注意生命周期顺序 : Awake -> OnEnable -> Start. 如果绑定其他LikeBehaviour对象的数据,尽量放在Start函数而非Awake,因为在Awake的时候,其他对象可能尚未执行初始化
      • C#Like免费版不支持协程,需要用Update来代替
      • 部分文件实在无法转化成热更新脚本的,我把他们放入目录'Assets\Scripts_NoneHotUpdate'内了. 例如基类为StateMachineBehaviour或Editor的
      • 因为不支持带模板的类,例如'public class EnemyDeath : Simulation.Event<EnemyDeath>'的, 直接就改成'public class EnemyDeath'就可以实现同样效果. 我们已经优化过了Simulation类的,让它可以支持热更新代码.
      • 原Demo看起来很卡顿,经过菜单"Window"->"Analysis"->"Profiler"查看是动画占了过多资源导致的, 我就加了一个距离Player过远的就隐藏组件功能,然后就不卡了
  • 修改预制体: "Assets\Prefabs"里面的预制体看起来是直接由场景引用的,我们直接去修改场景吧
  • 修改场景: 最终我们将会导出场景为AssetBundle文件
    • 打开场景'\Assets\Scenes\SampleScene.unity'
    • 菜单'File'->'Save As...'->我们保存为'\Assets\Scenes\SampleScene_HotUpdate.unity'
    • 修改当前场景里的所有绑定原'\Assets\Scripts'目录内的非热更新代码的, 在原位置添加对应的HotUpdateBehaviourXXXXX组件,然后按需设置绑定参数
    • 最后移除所有的旧的'\Assets\Scripts'代码的绑定
    • 设置AssetBundle : Project面板选中'\Assets\Scenes\SampleScene_HotUpdate.unity'后, 在Inspector面板里的Asset Labels的AssetBundle设置为none设置为'microgamefree',后缀为'ab'
    • 这个时候直接点编辑器里点运行'▶',应该可以正常调试运行的
  • 修改C#Like配置: 菜单'Window'->'C#Like'->打开'C#Like Setting'面板
    • 'Hot Update Script Folder'设置为'Assets/_Completed-Assets/HotUpdateScripts' (可以拖放目录)
    • 'Product Name'设置为'MicrogameFree'
    • 'Display Name'设置为'Platformer Microgame'
    • 'Default Scene'设置为'\Assets\Scenes\SampleScene_HotUpdate.unity' (可以拖放文件)
    • 'Download Path'设置为'https://www.csharplike.com/CSharpLikeFreeDemo/AssetBundles'
  • 编辑器测试调试
    • 如需Visual Studio断点调试代码, 菜单"Window"->"C#Like"->"C#Like Setting"->勾上"is debug mode" 来开启调试模式.
    • C#Like完整版因为比免费支持更多C#特性,更加接近调试模式. 即免费版会出现更多调试模式下没问题但非调试模式下有问题的情况.
    • 在编辑器里点'▶'按钮就可以正常运行调试可热更新的场景了.
    • 为了方便测试,我们在'Esc'按钮弹出的界面里多加了一个"Exit"按钮,用于退出当前游戏返回最初始的场景.
  • 导出最终产品AssetBundle
    • 菜单"Window"->"C#Like"->"C#Like Setting"->点击按钮"Rebuild Scripts"
    • 最终生成目录"PlatformerMicrogameFree\AssetBundles\MicrogameFree",同时也会复制到目录"StreamingAssets"
      • "PlatformerMicrogameFree\AssetBundles\MicrogameFree\WebGL\code.ab" : 是包含二进制代码文件的AssetBundle
      • "PlatformerMicrogameFree\AssetBundles\MicrogameFree\WebGL\microgamefree.ab" : 是包含资源(场景)的AssetBundle
      • "PlatformerMicrogameFree\AssetBundles\MicrogameFree\WebGL\config.json" : 是ResourceManager用到的配置JSON文件,作用类似manifest文件

 本系列文章导读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C#Like

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值