Skip to content

改变Rigidbody组件中IsKinematic属性的实验

改变Rigidbody组件中IsKinematic属性的实验

Rigidbody组件里,IsKinematic对于初学者来说是一个特别难以理解的属性。

本文围绕IsKinematic设定选项展开一系列实验,并对其进行解释说明。

文章内容将分为以下几个部分:

1、测试环境

2、关于Rigidbody

3、关于IsKinematic

4、 IsKinematic的优点

5、实验

      (1) 当球体滚动时的IsKinematic设定

      (2)当球体被抛出去时的IsKinematic设定

      (3)自由落体时的情况

      (4)动态切换IsKinematic值

6、 总结

1、测试环境

macOS 10.13 High Sierra

Unity2018.1.0f2

2、关于Rigidbody

概括来说,Rigidbody是Unity开发引擎中控制物理系统的必要组件。

Rigidbody参数 

3、关于IsKinematic

当我第一次看到这些设定选项时,老实说我并不明白其中涵义。 

true和false,到底哪一个设定会受到物理系统的影响呢?

后来我发现:如果为true,则不会受到物理系统的影响。如果为false,发生Rigidbody运动时则会受到物理系统的影响。

4、IsKinematic的优点

在Unity操作手册中,「Rigidbody概述」这一部分写的是「使用Rigidbody时不要更改Transform值」。

既然如此,那么,还有设定IsKinematic的必要吗?后来,在Unity操作手册英文版里,我看到一段这样的描写「如果想以一种非物理的方式进行表现,在这种情况下,请勾选IsKinematic」。

对此,我的疑问不减反增:如果不是物理系统的行为,为什么还需要设定Rigidbody呢?

作为初学者的我即使这样想,但我明白它们也有一定的好处,不但能够在Collider中检测碰撞,还能动态改变IsKinematic值。

在Unity操作手册英文版里,有个滑动门的案例,能够很好的说明这个问题。

通常,当门关上的时候,已经开启碰撞体的角色会被挡在门外。

当角色开门的时候,通过设定脚本将门滑动到指定位置,角色即可顺利通过。相反,如果对物理系统行为设置不当的话,有时候门会被吹飞,再恢复到原来的位置则相对不那么容易。

另外,开门和关门的时候,只需切换IsKinematic状态。例如开门时,IsKinematic会控制位置,但如果用武器攻打门的话,因为Rigidbody设定的缘故,门可能会被打飞。

鉴于这些问题,与其用Rigidbody处理门的问题,不如直接控制人物。

下面我将进行一些实验来展示修改IsKinematic属性值所产生的不同。

5、实验

(1)当球体滚动时的IsKinematic

现在,改变数值,我们观察一下运动发生的状态。

开始掷球。

准备的球有两种不同的isKinematic值,如下: 

isKinematic : true

isKinematic : false

同时对两个球施加力的时候,观察一下运动状态。

当ForceMode为Impulse时,下图的左上角数值表示施加力的大小。

两种不同IsKinematic值的球的滚动情况

因为它不受物理系统的影响,如果IsKinematic为ture时,根本不起作用。

(2)当球体被抛出去时的IsKinematic

证实一下球体被抛出去的状态。

两种不同IsKinematic值的球的被抛出去情况

和滚动的一样,当IsKinematic为ture时,就算用AddForce,白球也不会动。

(3)自由落体的情况

虽然结果已经显而易见了,但仍确认一下自由落体时的情况。

两种不同IsKinematic值的球的自由落体情况

当IsKinematic为ture时,不受重力的影响。

以左边物体的Rigidbody为例,当UseGravity为true时,IsKinematic具有优先性。 

所以,动态切换IsKinematic的时候,别忘了取消勾选UseGravity。

(4)动态改变IsKinematic值

以动态切换IsKinematic为例,实现以下功能:击中球1秒后,通过脚本来改变运动。

有了Rigidbody,当IsKinematic为false时发生碰撞。由于Mass的差异,球飞出去的方式也有所不同。

球的反击

粉红色的球从屏幕右侧滚出,一秒钟后,白球和黄球将IsKinematic自动设置为true,并开始往复运动。该状态可直接在脚本的Transform中进行设置。

从上图可以看到,画面前方的粉红色球被质量较大的黄球碰撞,向相反方向滚动,并越过往复运动范围。后侧粉红色的球被击中多次,但其被白球碰撞后并没有滚动到图片最右边。

下一步借助Cube来进行碰撞。

 Cube的反击

可以发现,有了IsKinematic之后,为粉红色的球提供了一个力。

由此延伸至游戏开发实操中,Cube可以作为地牢里的移动壁垒装置,用于将设定的角色打落到地下室底部。 

同时需要注意的是,在体积上,移动壁垒最好比角色大一些。如「球的反击」一图所示,如果碰撞的球大小相同,Rigidbody则会出现如图所示的奇怪现象。

多数情况下,通过脚本来控制对象的移动,或许也是不错的选择。 

6、总结

Rigidbody的IsKinematic使用方法,对初学者来说的确有些难以理解。

一开始可能很难使用,但借助脚本来控制对象的移动,总体上来说还是很简便的。

希望本文的介绍对你有所帮助。

相关推荐: 运营干货:美客多广告投放策略

众所周知,广告是跨境卖家在电商平台上快速获取流量的最直接的方式之一。在日常运营推广过程中,卖家可以根据不同产品的情况,通过竞价广告制定不同的推广策略,从而可能获得更高的曝光,提高销量,带来更多的收益。 美客多的竞价广告主要是根据投放广告的Listing质量、广…

    码刀科技(www.lekshop.cn)是国内知名企业级电商平台提供商,为企业级商家提供最佳的电商平台搭建(多种模式电商平台搭建:B2B/B2B2C/B2C/O2O/新零售/跨境等)、平台管理系统开发及互联网采购解决方案服务, 联系客服了解更多.

    电子商务网站建设的重要性和好处