English       FAQ(e.g how to update old project to hot update project.)
简体中文     常见问题解答(例如如何把旧项目升级为可热更新项目)

C#Like 常见问题

我们会定期收集用户的问题会更新到这里

问题: 如何把我现有的旧非热更项目升级为可热更项目?

回答: 我们以UnityAsset商店的Unity出品的免费项目'Tower Defense Template'(塔防游戏模板)作为升级示例.


涉及修改的文件 :
Assets\C#Like\HotUpdateScripts\TowerDefense\UI\PauseMenu.cs
Assets\UnityTechnologies\TowerDefenseTemplate\Scripts\TowerDefense\UI\HUD\GameUI.cs
Assets\UnityTechnologies\TowerDefenseTemplate\Scripts\Core\UI\SimpleMainMenuPage.cs

1 下载安装插件 Tower Defense Template .

2 下载安装插件 C#LikeFree or C#Like .

3 打开场景 : 'Assets\UnityTechnologies\TowerDefenseTemplate\Scenes\MainMenu.unity'

4 下面开始转换成热更代码.

  4.1 我们把整个游戏的代码分为两部分:可热更代码部分和非热更代码部分
        通常我们通过'HotUpdateBehaviourXXXX'组件'自动'地调用非热更代码, 该组件会自动绑定继承于'LikeBehaviour'的类代码.
      非热更代码'不能'直接调用热更新代码, 你可以当做热更代码已经完全从你项目里移除一样,是不可见的,所有从非热更或预制体直接调用热更代码将会丢失链接和报错.
升级最难的地方就是确保所有非热更代码或预制体都不要有调用或引用热更新代码地方.
        我们如果'手动'地从非热更代码里去调用可热更代码?
      你可以先获得'HotUpdateBehaviour'组件, 然后通过该对象调用其绑定的类函数. 例如我们在非热更代码里手动调用热更代码'PauseMenu'类的'AddFunc'函数.
  4.2 我们示范把一个继承于MonoBehaviour的非热更新类转化成热更新代码的类. 例如转化'Assets\UnityTechnologies\TowerDefenseTemplate\Scripts\TowerDefense\UI\PauseMenu.cs'作为示例
    4.2.1 先修改对于原绑定的预制体,否则你的预制体会丢失链接
      4.2.1.1 编辑器里双击打开'Assets\UnityTechnologies\TowerDefenseTemplate\Prefabs\UI\HUD\PauseMenu.prefab'编辑.
      4.2.1.2 在Hierarchy面板选中'PauseMenu', 找到'Pause Menu(Script)', 然后点'Add Component'添加'Hot Update Behaviour Update(Script)'组件(选择哪个'HotUpdateBehaviourXXXX'取决于你的逻辑. 如果你是懒鬼的话,全选'HotUpdateBehaviourAll'都行,这个是不推荐的,因为有性能问题.)
      4.2.1.3 如图绑定各个与热更新代码有交互的节点:
      
      4.2.1.4 绑定各个按钮的事件('Pause()' 'Unpause()' 'RestartPressed' 'LevelSelectPressed').
      这里选取其中一个按钮示范,例如PauseMenu/Button
      
改成
      
      4.2.1.5 移除'Pause Menu(Script)'这个组件,因为后面不再存在这个脚本了
      4.2.2 把原始代码文件剪切到热更新代码目录里去, 默认目录为'Assets/C#Like/HotUpdateScripts/', 你可以在C#Like设置面板里修改.
      例如把'Assets\UnityTechnologies\TowerDefenseTemplate\Scripts\TowerDefense\UI\PauseMenu.cs'剪切到'Assets\C#Like\HotUpdateScripts\TowerDefense\UI\PauseMenu.cs'
      4.2.3 把基类MonoBehaviour改为LikeBehaviour
      'public class PauseMenu : MonoBehaviour' 改成 'public class PauseMenu : LikeBehaviour'
      4.2.4 绑定原预制体里的绑定变量.
      4.2.5 存在的问题: 暂不支持调用非热更新代码里定义在类里的枚举.
      'TowerDefense.UI.HUD.GameUI.State' 需要移出 'TowerDefense.UI.HUD.GameUI'这个类的外面, 变成 'TowerDefense.UI.HUD.State'.
注意,这个过程如果涉及的代码都要调整.
      4.2.6 在合适的地方初始化热更新代码
      修改 public class SimpleMainMenuPage : MonoBehaviour, IMainMenuPage

  4.3 不是继承于MonoBehaviour的类
      直接按正常方式复制到热更新目录即可,注意免费版和完整版的区别哦.
  4.4 不支持模板类,无论免费版或完整版
      例如不支持 'public class LevelManager : Singleton<LevelManager>' 或像 'public class TemplateClass<T>'这样定义类.
      单例类你可以按这种方式修改:

Contact me: 465583519@qq.com      粤ICP备2022042034号-1