发布时间:2024-06-23 12:01
Unity什么时候能打微信小游戏包?或者说打包到H5平台?
这个问题困扰了某些人很久,比如我……
针对这个问题,Unity给的方案是:Project Tiny。
### 1. 版本进度怎么样了?
然而,距离上一次Unity大张旗鼓宣传Project Tiny,已经过去了大半年。
最近Unity官方公众号又有一波宣传攻势。
于是乎,我又上Unity官方论坛看了一下Unity Project Tiny项目,也就是Unity的H5版本:
8个月快过去了,终于发布了0.28预览版。
嗯……0.28……preview……
好奇的我又看了一下开发文档中的版本历史,2019年12月底的版本是:0.20 preview……
文档地址:https://docs.google.com/document/d/1A8hen2hLFY5FLkC5gd3JP2Z-IpHfnAX-CpYLK3aOdwA/edit
不过,可以看到,疫情期间,Project Tiny团队还在以差不多每个月1-2个版本的速度推进。
老实说,从程序员的角度,我也不知道到底算快还是慢。
依稀记得,Unity花了整整一个2019年,把版本从0.1推进到0.2。
那么,是不是说,从现在的进度来看,是不是今年只能推进到0.3?
或者按照每个月2个小版本的速度,0.28 + 0.01 * 10 = 0.38?
不不不,从版本号,我们没法直接推导出从0.28到1.0版本需要多长时间,毕竟版本推进并不是一个线性的过程。
而版本号也不是一个简单进度条,版本0.28,真的并不表示进度28%……
只能说Unity团队比较严谨……没有高估版本进度。
但是,从市场的角度,可以说是很慢了吧……
即使一年一次大宣传,距离下一次大版本宣传,也不到5个月了,年底是否真的有可以落地的版本?
能否实现Unity说的“预计年底推出正式版”?
我其实是有点悲观。
# 2. 现存Unity项目怎么办?
但是,真正让我忐忑不安的是,另一个问题:现存Unity项目怎么办?
从Unity Project Tiny的文档里透露出来的信息来看,Unity的目标是,对于任何一个Unity项目,只要它与新DOTS架构兼容,就可以与Project Tiny兼容。
可以说是很负责任了。
但是,
换个说法就是,对于一个Unity项目,想要打包到H5平台运行,需要先保证它能够与新的DOTS架构兼容。
再换个说法就是,对于现存的Unity项目,想要打包到H5平台上,需要看看全新的DOTS架构是否与现有的“旧”架构兼容。
# 2.1. 什么是Hybrid?
文档中提到了一个名词:DOTS Hybrid Unity。
这是一种混合编程模式,也就是,现有的旧Unity运行时与新DOTS在同一个项目里并存的一种模式。
Unity的上一波宣传中,特意提到了这种方式:在现有的Unity项目中,能够直接使用DOTS的部分功能。
事实上,由于当前DOTS缺少的功能还比较多,所以,稍微复杂一点的演示Demo都是以这种DOTS Hybrid方式实现的。
Unity官方关于DOTS Hybrid的文档:
https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@latest
文档也介绍了如何配置DOTS Hybrid模式:
1). 方法1,在编辑器中通过一些设置,在编译时进行转换。
2). 方法2,使用ConvertToEntity在运行时转换。
image
嗯……这个ConvertToEntity组件是怎么工作的呢?
官方文档:https://docs.unity3d.com/Packages/com.unity.entities@0.13/api/Unity.Entities.ConvertToEntity.html
Hybrid Renderer文档中透露出来的信息:
1). Unity曾经想要另外做一个DOTS编辑器,现在放弃了。
2). Unity DOTS将使用现有的基于GameObject的编辑器,来做DOTS工作流的一部分。
简单的说,我们可以继续通过配置GameObject来实现DOTS的配置,而添加了ConvertToEntity组件的GameObject会在运行时自动被转换为Entity,就是DOTS架构的核心单元。
参考教程:https://gametorrahod.com/game-object-conversion-and-subscene/
这个组件看起来很简洁……似乎……很强大很智能……
真的吗?
也许吧。。。
以下内容纯粹虚构,请勿当真:
这样就可以了吗?会不会需要别的工作?
其实吧,这个组件的功能,就是把GameObject中的各个组件,转换为数据。
只有数据吗?
对,只有数据。
那我写在MonoBehavior中的那些代码呢?
这个嘛,说来话长……
首先,你要知道,DOTS中,Entity只是数据,所以它通常定义成struct,而不是class。
其次,DOTS中,Entity的行为是在Entity System中进行控制的。
最后,现有的MonoBehavior组件既包含了数据又包含了控制逻辑,所以才容易产生性能瓶颈。
最最后,使用Entity和Entity System替换MonoBehavior,可以将性能提升到另一个层次。
没有人会满足于对性能的追求,对吧?我们可不是牙膏厂。
所以,付出一点点代价,比如把MonoBehavior的代码提出来,写成Entity System,这种小事情,没人会在意的,对吧。
可是……
可是…………
可是………………
# 3. 市场真的需要DOTS吗?
什么?!
你说现在的旧架构的性能已经满足了你的需求?!
你说现在的硬件设备已经能够流畅运行别的引擎了?
……
……
……
那么,问题来了,对于现有的旧Unity项目,
其实吧,
H5市场需要的是一个打包工具,而Unity却决定重写一整套底层架构。
我真的不知道,这到底是不是个好主意,不过,这个真的很程序员。
# 4. 最后的声明
为了避免抬杠,非官方的H5打包方式,其实一直都有。
但是,我真的很希望官方出一个工具嘛。
北大数学天才“韦神”上热搜,随手帮6个博士解决困扰4个月的难题
Leetcode题78、子集(Python题解)字节跳动面试题
数据分析引擎百花齐放,为什么要大力投入ClickHouse?
leetcode 932. Beautiful Array 漂亮数组(中等)
Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web
【C语言进阶篇】字符函数和字符串函数——strstr&&strtok&&strerror&&strncpy&&strncat&&strcmp函数