今天下午碰到个问题纠结了很久:
人物加上了Rigidbody并使用了重力,遇到悬崖居然不掉下,如履平地地走了过去。
想了很久又请教了别人,花了很长时间才发现,CharacterController与Rigidbody两个组件有冲突。
Unity圣典中的说法是:
角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。(个人理解:用CharacterController组件,它包含Rigidbody组件的一些属性,就不用用Rigidbody组件了)。 角色控制器不受力的影响,仅仅当你调用Move函数时才运动。然后它将执行运动,但是受制于碰撞。
下面说说我自己的理解:
1.添加了CharacterController组件后,人物将不受力影响,这时即使加上Rigidbody组件,并启用Use Gravity,人物也不会受重力影响,在脚本中通过rigidbody对人物施加力也是无效的。
也就是说CharacterController屏蔽了Rigidbody的所有属性和方法。
要控制CharacterController移动,可以通过在脚本中调用Move方法使其移动。
2.虽然CharacterController不受力,但是有个例外是,它受碰撞的影响。
一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,并且其中一个有Rigidbody。
但是如果一方有CharacterController,则不需要。这时碰撞发生的条件为:
一方有CharacterController,另一方有Collider。CharacterController本身就继承自Collider。
人物加上了Rigidbody并使用了重力,遇到悬崖居然不掉下,如履平地地走了过去。
想了很久又请教了别人,花了很长时间才发现,CharacterController与Rigidbody两个组件有冲突。
Unity圣典中的说法是:
角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。(个人理解:用CharacterController组件,它包含Rigidbody组件的一些属性,就不用用Rigidbody组件了)。 角色控制器不受力的影响,仅仅当你调用Move函数时才运动。然后它将执行运动,但是受制于碰撞。
下面说说我自己的理解:
1.添加了CharacterController组件后,人物将不受力影响,这时即使加上Rigidbody组件,并启用Use Gravity,人物也不会受重力影响,在脚本中通过rigidbody对人物施加力也是无效的。
也就是说CharacterController屏蔽了Rigidbody的所有属性和方法。
要控制CharacterController移动,可以通过在脚本中调用Move方法使其移动。
2.虽然CharacterController不受力,但是有个例外是,它受碰撞的影响。
一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,并且其中一个有Rigidbody。
但是如果一方有CharacterController,则不需要。这时碰撞发生的条件为:
一方有CharacterController,另一方有Collider。CharacterController本身就继承自Collider。