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移动。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注