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

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

简介

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

搭建的详细步骤

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

  • 创建一个空白的2D/3D项目为CSharpLikeFreeDemo
  • 到Unity资源商店购买相关的免费资源: 如果已购买的则跳过
  • 导入相关的免费资源:
    • 先打开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"

 本系列文章导读:

一、主要内容:OpenCV能够实现强大丰富的图像处理,但是它缺少一个能够支持它运行的界面。Csharp经过多年的发展,得益于它的“所见及所得”能力,非常方便编写界面。这两者如果能够“双剑合璧”,将有效帮助实际工作产出。本课着重推荐GOCW采用“Csharp基于CLR直接调用Opencv编写的算法库”方法,能够将最新的OpenCV技术引入进来,同时保证生成程序的最小化。    为了进一步说明Csharp和OpenCV的结合使用,首先一个较为完整的基于winform实现答题卡识别的例子,相比较之前的实现,本次进一步贴近生产实际、内涵丰富,对算法也进行了进一步提炼。同时我们对WPF下对OpenCV函数的调用、OpenCV.js的调用进行相关教授。       二、课程结构1、 EmguCV、OpenCVSharp和GOCW之间进行比较(方便代码编写、能够融入最新的算法、速度有保障、方便调试找错、拒绝黑箱化);2、视频采集模块的构建,视频采集和图像处理之间的关系;3、视频采集专用的SDK和“陪练”系统的介绍;4、在视频增强类项目中和图像处理项目中,算法的选择;5、Csharp界面设计、图片的存储和其他构建设计;6、较为完整的答题卡识别例子,兼顾界面设计和算法分析;8、WPF基于GOCW也同样可以基于GOCW实现算法调用;webForm虽然也可以通过类似方法调用,但是OpenCV.JS的方法更现代高效。9、关于软件部署的相关要点和窍门。       三、知识要点:1、基本环境构建和程序框架;2、CLR基本原理和应用方法;3、接入、采集、模拟输入;4、图像处理,通过构建循环采集图片;5、增强和实时处理;6、基于投影等技术的答题卡识别算法;7、存储、转换;8、部署交付。        课程能够帮助你掌握Csharp调用Opencv的基本方法,获得相应框架代码和指导;从而进一步提升实现“基于图像处理”的解决方案能力。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C#Like

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

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

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

打赏作者

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

抵扣说明:

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

余额充值