Posted on 七月 14, 2018
Unity Roll-a-ball 学习笔记
官网的roll a ball视频教程前几节基本是介绍Unity基础操作。
教程的文本内容,可以参考:
https://www.jianshu.com/p/6e4b0435e30e
https://www.jianshu.com/p/97b630a23234
对于文中没写到的以及自己的一些理解,记录在这里。
Update、FixedUpdate、LateUpdate个人理解
Update游戏的每一帧调用,和机器有关,比如有的机器性能不好还能20多帧每秒,有的性能好的机器可以60帧
FixedUpdate和机器无关,固定的频率。处理物理逻辑的时候要把代码放在这里。
LateUpdate在Update之后调用。处理相机相关代码放在这里。
关于prefab个人理解
在project里创建一个PreFabs的文件夹。将Hierarchy里的Object拖到PreFabs里,就创建了这个Object的prefab。
如果拖到其他文件夹,也会创建prefab。猜测只要是将Hierarchy里的Object拖到Project里,就会创建他的prefab。
选择Object,ctrl + D可以Duplicate,复制粘贴。
选择其中的一个Object修改,再点击Inspector里的Prefab的Apply,则会修改prefab。
关于static collider、dynamic collider、standard rigid body、kinematic rigid body个人理解
写好代码后,Player(球)滚动时触碰到方块,方块并没有消失,而是像墙一样碰撞,是因为Unity物理系统不允许两个Collider(碰撞体)重合(除非已经重合的物体),所以需要设置方块为trigger。
设置完trigger后运行游戏,Player可以收集球了,看起来很完美,但是这样做会有个性能问题:
Unity的优化算法会将所有static collider(静态碰撞体)计算数据缓存,如果static collider移动、旋转、缩放的话,Unity会重新计算所有static collider数据并更新缓存。游戏中方块是static collider,而且每一帧都在旋转,所以会影响性能。
rigid body(刚体)是dynamic collider,不参与碰撞数据缓存。所以解决方案是将方块设置成rigid body。但是设置完之后,发现方块掉下去了,因为方块是trigger。
解决方法是将方块设置成kinematic rigid body。
kinematic rigid body不受物理影响,只受transform影响(移动、旋转、缩放),可以用于移动平台、带有动画的trigger。
总结起来就是:
static collider不会移动,像是墙、地板;
dynamic collider可以移动,且有rigid body。
standard rigid body通过physics forces移动;
kinematic rigid body通过transform移动。