上一篇的项目是2d的,现在谈谈对于3d试玩项目的一些经历。
相对于2d来说,3d的项目更接近于Unity的开发,但是也有很多不一样的地方,具体的也可以参考Cocos给他官方示例。
Unity 开发者入门 Cocos Creator 快速指南 | Cocos Creator
下面还是总结一下遇到的一些问题。
问题集合:
1.碰撞检测相关
不清楚是不是Cocos本身的问题,我感觉对于Unity来说,Cocos的检测更容易出现问题,很多时候都检测不到。如果能用其他方式代替是最好的,比如射线,数学方式等等。
2.禁用位移和旋转
Cocos和Unity的刚体的属性有些不一样,在Unity中,可以通过刚体外部组件的Constrants属性直接对位移或者旋转禁用,也可以通过代码中对相关属性之间禁用。
但是Cocos的刚体组件外部是没有这一属性的,虽然网上找到的参考资料说有fixedRotation这个属性可以之间禁用旋转,但是我添加后并没有这个属性,可能在更新中被迭代掉了。所以Cocos中如果有这个需求,可以在代码中控制linearVelocity(线性速度)来停止位移,也可以通过更改外部的Linear Factor的值来控制。
3.节点删除后,运行任然报节点错误
在开发过程中,我创建了一个Test脚本来测试开发的功能,之后将功能移到了其他脚本中,自然而然,Test脚本与相关的挂载测试节点也没有了,可是之后在运行中,会报出节点脚本丢失的错误,但是此时我的脚本与节点以及删掉了。
可以看到,报错中的Sorcers-001节点在对应的节点下根本没有,哪怕我去搜索也是找不到的。在翻阅Cocos论坛的时候也遇到了这个提问。下面是解决办法。
解决方法:
1.报错的节点是场景中,那么通过VsCode打开脚本代码(其他编辑器也行)
2.在代码中搜索报错节点,这里我已经弄完了,所以搜索不到。这个时候你会发现在一些奇奇怪怪的地方出现了这个节点的相关信息,比如一些不相干的预制体之类的。我也不太明白为什么,明明没有在这些地方加载过这些错误信息。
3.找到对于的错误节点位置后,你可以之间在代码中删除节点信息。(记得先复制预制体,避免报错),除此之外,如果预制体不复杂,也可以之间删掉预制体从新做一个。
4.包体优化的问题
在试玩中,包体是不能大于5M的,我做过测试,3d项目的空场景打包大概有3.7m左右,在剔除不必要的功能后,到了2m左右。但是对于3d项目来说,资源的占用是非常大的,这个测试项目的资源我放在场景中,之间打包后,包体大小甚至达到了5.7m,明显不行。
可以对资源的一些不必要部分进行剔除,比如同类型的东西,不需要多个,可以通过更改材质的颜色或者替换材质来达到相关需求。
不过,我试过去复制一个材质来更改颜色的方法,发现打包后的包体也很大,和直接复制一份资源也没差多少了,后面直接用了原本就有的其他的材质,才解决这个问题。
另外,对纹理进行压缩可以优化包体。不过我发现一个问题,在前几次压缩纹理打包之后,包体确实变小了,但是后面几次打包或,包体却大了很多很多。我怀疑是我的压缩纹理格式有问题(我用的默认预设),后面改为不压缩,包体又变成了前几次压缩打包的包体大小。
试玩开发
上一篇中,我提到过在打包完成之后,需要对Html中的代码进行更改,后面我试了一些,好像不用。这一点可以根据情况来。
如果打包之后的包体任然大于平台的限制大小怎么办?
可以分包吗?
应该是不可以的,这一点不太清楚,之前问过一些试玩开发的同行,给的回答就是不可以,因为平台的限制。如果包体在优化之后还是大于限制大小,就只能考虑从资源上入手了,减少资源,减少模型面数等等。
这就是目前遇到的一些问题和总结,后面有的话会继续更新。