本文摘自“Unity开发者社区”Unity开放日北京站-专题分享。
微信、抖音、QQ、快手、支付宝、百度等都是国内小,以微信为例,2019年5月玩家突破1亿,2021年产品实现销量过千万。已经突破1亿人。超过50种款式。这个数据足以说明小型现在拥有强大的玩家基础和变现能力,因此Unity正在逐步加大对移动小型的支持。
Unity中国引擎基础架构技术总监赵亮以Unity小开发为主题,介绍了主流小和技术方案,以及资源流式传输的自动流式传输。用于点击玩迷你。小技术解决方案NativeInstantGames和WebGL。
除了提供非常实用的技术建议外,演讲还重点讨论了Unity引擎方面的优化和改进,包括优化内存使用、优化绘图效率、使引擎更轻薄以及加快小型的启动速度。
以下是分享的内容
赵亮今天我想谈谈如何使用Unity开发小。迷你是一种嵌入主机应用程序中的产品,可以立即玩,无需下载或安装。国内小用户数量巨大,2018年小市场规模达到300亿元,约占移动市场的20%。移动小支持.
我的分享包括几个方面首先介绍一下目前主流的小以及采用的技术方案,然后介绍一下点击玩小所需的资源流式加载,然后各做两个小介绍。我介绍。技术解决方案原生即时和WebGL,最后是未来的工作方向。
迷你
微信、抖音、QQ、快手、支付宝、百度等都是国内的小。这里介绍一下比较有代表性的微信和抖音以及所采用的技术方案。
微信于2017年12月推出了“跳跃”小。截至2019年1月,开发者数量已突破10万。2019年5月用户数突破1亿。预计2021年将发布超过50款已销售的产品。突破1000万。
图为微信小的类别。随着时间的推移,我们可以看到,小品类近年来逐渐从超休闲向中级演变。例如MMO、策略等。也开始了迷你的开发。
您还可以关注微信公开课,一些开发者分享了他们使用Unity开发小的经验。
抖音调查发现,小的受欢迎程度仅次于APP。同时,小用户规模较大且具有独特的特点,且以年轻男性为主。他们年龄在18岁至40岁之间,有良好的消费能力。
主机应用实现点击玩小的技术方案主要有两种
一种是使用wasm+webgl的基于浏览器内核的解决方案,另一种是在Android上实现的原生即时。大多数小型都采用WebGL,但原生即时的优势在于品质与原生APP相似,抖音和快手都在使用这种方案。
资源流式加载
如前所述,小不断从“超休闲”向“中严肃”演变,越来越多的资源被运用到小中。一些小型资产的包装为数百兆或超过1GB。您应该实现点播流式下载,以确保玩家可以立即点击播放并减少下载延迟。对于开发者来说,管理资源的流式加载需要投入大量的开发时间。因此,我们在引擎侧开发了AutoStreaming功能,让引擎最底层能够自动处理流式加载。
这里简单介绍一下AutoStreaming的工作原理。Unity编辑器提供了打包时自动分离批量资源的工具。示例纹理、网格、音频、动画、字体。这些资源都部署在云端。分离重度资源后,首包和AB包大幅缩减,即使是小也能快速下载加载。运行时,引擎会根据需要自动从云端下载资源。开发者无需修改逻辑,可以像往常一样同步实例化预制件。这些纹理和网格会自动下载并加载到后台队列中。
这里我们以一款小型网络为例来看看AutoStreaming的效果。第一个包中的数据从42M大幅减少到68M,启动时间大幅缩短。重量节省并不那么显着,因为用户生成的AssetBundle也稍小,因为仅选择了一部分纹理进行AutoStreaming。
另一个非常重要的好处来自内存,它最多可减少75MB的内存使用量。内存在iOS上非常重要。减少的原因是被移除的重资源拥有更合理的生命周期。除非打开AutoStreaming,否则这些纹理即使在加载后仍然会占用内存。
这是webgl的一个特点没有真正的文件系统,只有内存中的文件系统。第一个包中的资源将继续占用内存,直到AB也被卸载。这与原生APP不同,原生APP允许通过每次读取文件的一部分时重用少量内存来访大文件。
原生即时
简单介绍一下原生小解决方案,它的优点是可以直接对标原生APP,性能和体验相同,支持多线程,支持Gles3和Vulkan,还支持原生APP插件。它被使用了。沙箱中的文件可以同步访,保证了访效率高,占用内存少,作为独立的子进程,在沙箱中运行不干扰主机运行,原生即时也提供了完美的稳定性和安全题。因此,手游开发商适配原生即时的成本非常低,只要进行流式加载就不需要额外的适配和优化。
右图是抖音上一款名为《古董就是玩玩》的小,虽然曾经应用到WebGL上,但是画面质量还是大打折扣,所以这就是NativeInstantGame的优势。
当然它也有明显的缺陷,目前无法支持iOS。因此,微信并未集成该方案,字节跳动、快手等其他则采用混合方案。iOS采用WebGL方案,Android同时支持WebGL和NativeInstantGame。如果有些追求更高的性能,可以使用NativeInstantGames,如果寻求更多的用户,质量达不到性能,可以选择WebGL。
下图介绍了原生即时的工作原理。Unity将每个小运行所需的运行时库和底层资源打包到共享引擎包中,以便主机应用程序可以提前准备,从而减少每个小启动时等待下载的时间。共享引擎包大约9MB,其中包括libunityso、libmonoso和其他运行时库、常见网络dll(例如mscorlibdll、Systemxxxdll、UnityEnginexxxdll、Unity本机资源)。
获得共享引擎包后,开发者可以将小打包为两部分一是非常小的首包,大约5-10MB,可以快速加载和下载,包括本身、逻辑等。提供派对插件、AutoStreaming资源和json描述文件,供文件开发人员审核和小的客户端加载。
当主机客户端启动小时,会根据刚才提到的json文件描述来获取的第一个包。主机通常会提前下载并解压前面提到的共享引擎包。然后客户端将第一个包解压到小对应的沙箱文件夹中,并通过小型InstantGameLauncher启动Unity小子进程。
运行时,这些所需资源可以自动从云端下载。这适用于自动流式传输情况,否则您必须自己动态加载它。
网页GL
下面,我们详细介绍一下WebGL的解决方案,虽然它具有支持iOS和Android的优点,但是该解决方案有很多,因此我们将用更多的篇幅来介绍它。
iOS上的WebGL内存非常有限。低端电脑不能超过1GB,而高端电脑可以有14GB左右。超过此可能会触发操作系统OOM并强制进程重新启动。WebGL的执行效率比原生APP大约慢3倍。目前仅支持单线程,不支持多线程,因此WebGL小的CPU性能远低于原生APP。图形API仅支持WebGL1/WebGL2,因此一些高级功能和优化(包括ComputeShader)不可用。由于没有文件系统,因此需要更大的内存来模拟文件系统。这也严重影响了Unity缓存机制,导致缓存文件无法同步访。
由于CPU的性能比较弱,随着变得更加复杂、计算量增大,手机很容易过热。因为它只支持websockets,所以网络API也有,所以开发者必须适应。上述也了您可以使用的插件。iOS对WebGL的支持也不尽如人意,因此必须进行特殊的优化,并且经常需要为iOS编写特殊的解决方法。
当谈到WebGL解决方案时,iOS比Android面临更多挑战。因此,下面的讨论将重点讨论如何在iOS上对小进行性能分析和优化。iOS已经优化,Android基本没有题。
这里我们以分别打包原生APP和WebGL小的情况来比较内存、CPU、GPU的差异。我们使用的测试手机是iPhone12。
相比主APP,WebGL进程多占用了约450M内存。由于加载和编译,这占用了340M,Wasm堆多了90M未分配内存,文件系统多占用了60M。
除了Wasm文件本身之外,浏览器内核在编译和运行代码时也会使用更多内存。相关的缓存和JIT优化也使用更多的内存。总大小约为Wasm文件大小的10倍。
接下来我们分析未分配的部分。Wasm堆的大小从预设值开始,以一定的步长逐渐扩展。扩展方法很愚蠢,需要复制整个ArrayBuffer。例如从400M扩容到500M,扩容时也会有400M和500M,总峰值为900M。鼓励开发者关注
一、不继承unityplayer能否实现unity调用android?
。
Unity可以在不继承UnityPlayer的情况下调用Android,主要是通过直接交互的方式,并通过使用Eclipse生成jar包和Java编写接口来实现替代功能。
项目需要获取CPU型号,但是Unity自带的API接口没有这个功能,所以必须通过Android自带的接口来获取。如今,Unity和Android之间的很多交互都是通过继承UnityPlayerActivity来完成的,但这种继承通常用于SDK编写中。
幸运的是,我之前有过从Unity调用NDK的经验,所以当我第一次开始传输程序时,我在上海一家公司的实验室呆了一段时间,碰巧遇到了类似的情况。首先,使用AndroidStudio创建一个库项目。只需创建一个名为api的新JavaClass即可实现获取CPU信息。
二、unity引擎用什么模拟器?
1Unity引擎使用Unity模拟器进行模拟。Unity模拟器是Unity引擎中内置的工具,用于在开发过程中实时预览和测试的性能和功能。Unity模拟器集成了物理引擎、图形渲染、动画系统等功能,可以在多种和设备上模拟性能。可以快速反馈和调试逻辑,为开发者提供便捷的工作环境,节省开发时间和成本。同时,Unity还支持在真实系统上进行模拟和测试,以保证最终在目标上的性能和表现。
三、安卓开发语言有哪些?
Android开发可以使用以下语言1-JavaJava是推荐的Android开发语言,也是最常用的语言。开发人员可以使用Java编写Android应用程序,并使用开发工具和库进行开发。2-KotlinKotlin是JetBrains开发的基于Java虚拟机的静态类型编程语言。自2017年起,Android将Kotlin视为其语言之一,并提供了一套工具和文档来支持Kotlin开发。3-C++C++是一种通用的高级编程语言,也可用于Android开发。开发人员可以使用C++编写一些高性能的跨应用程序组件,然后通过Java原生接口与Java代码进行交互。4-C和-NETXamarin允许开发人员使用C和-NET开发跨Android应用程序。Xamarin是一个跨开发框架,允许开发人员使用C语言编写Android应用程序。5-HTML、CSS和JavaScript开发人员可以使用ReactNative、ApacheCordova和Ionic等框架,使用常见的前端开发技术来开发Android应用程序。这些语言都可以用于Android开发,开发者可以根据自己的喜好和需求选择合适的编程语言。
如果你还想知道更多的unity安卓开发和unity安卓开发什么手机的详细内容,记得关注收藏本站。
No Comment