Unity两个物体发生碰撞的条件(即调用碰撞函数的条件)
2016-08-18 12:59
399 查看
好吧,网上好多资料显示发生碰撞条件如下:
两个对象都有Collider组件且至少一个有Rigidbody组件
其中至少一个物体(必须运动的)必须带有碰撞器(collider)+刚体(Rigidbody),另一个物体(可以静止也可以运动)也必须至少带有collider
也有说一方有CharacterController,另一方有Collider,于是这里对 CharacterController做点补充。
这里再引用一篇关于碰撞的函数调用归纳较好的文章:点击打开链接
Unity圣典中的说法是:
CharacterController角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。(个人理解:用CharacterController组件,它包含Rigidbody组件的一些属性,就不用用Rigidbody组件了)。 角色控制器不受力的影响,仅仅当你调用Move函数时才运动。然后它将执行运动,但是受制于碰撞。
下面说说我自己的理解:
(1)添加了CharacterController组件后,人物将不受力影响,这时即使加上Rigidbody组件,并启用Use Gravity,人物也不会受重力影响,在脚本中通过rigidbody对人物施加力也是无效的。也就是说CharacterController屏蔽了Rigidbody的所有属性和方法。要控制CharacterController移动,可以通过在脚本中调用Move方法使其移动。
(2)虽然CharacterController不受力,但是有个例外是,它受碰撞的影响。
一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,并且其中一个有Rigidbody。
但是如果一方有CharacterController,则不需要。这时碰撞发生的条件为:
一方有CharacterController,另一方有Collider。CharacterController本身就继承自Collider。
(3)碰撞发生时,CharacterController不会推动其它物体移动,也就是说CharacterController不会对它所碰撞的物体施加物理作用。除非我们在脚本中添加了OnControllerColliderHit()函数,在该函数中使用被碰撞物体的rigidbody对被碰撞物体施加力。
感谢转载:点击打开链接
两个对象都有Collider组件且至少一个有Rigidbody组件
其中至少一个物体(必须运动的)必须带有碰撞器(collider)+刚体(Rigidbody),另一个物体(可以静止也可以运动)也必须至少带有collider
也有说一方有CharacterController,另一方有Collider,于是这里对 CharacterController做点补充。
这里再引用一篇关于碰撞的函数调用归纳较好的文章:点击打开链接
Unity圣典中的说法是:
CharacterController角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。(个人理解:用CharacterController组件,它包含Rigidbody组件的一些属性,就不用用Rigidbody组件了)。 角色控制器不受力的影响,仅仅当你调用Move函数时才运动。然后它将执行运动,但是受制于碰撞。
下面说说我自己的理解:
(1)添加了CharacterController组件后,人物将不受力影响,这时即使加上Rigidbody组件,并启用Use Gravity,人物也不会受重力影响,在脚本中通过rigidbody对人物施加力也是无效的。也就是说CharacterController屏蔽了Rigidbody的所有属性和方法。要控制CharacterController移动,可以通过在脚本中调用Move方法使其移动。
(2)虽然CharacterController不受力,但是有个例外是,它受碰撞的影响。
一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,并且其中一个有Rigidbody。
但是如果一方有CharacterController,则不需要。这时碰撞发生的条件为:
一方有CharacterController,另一方有Collider。CharacterController本身就继承自Collider。
(3)碰撞发生时,CharacterController不会推动其它物体移动,也就是说CharacterController不会对它所碰撞的物体施加物理作用。除非我们在脚本中添加了OnControllerColliderHit()函数,在该函数中使用被碰撞物体的rigidbody对被碰撞物体施加力。
感谢转载:点击打开链接
// this script pushes all rigidbodies that the character touches var pushPower = 2.0; function OnControllerColliderHit (hit : ControllerColliderHit) { var body : Rigidbody = hit.collider.attachedRigidbody; // no rigidbody if (body == null || body.isKinematic) return; // We dont want to push objects below us if (hit.moveDirection.y < -0.3) return; // Calculate push direction from move direction, // we only push objects to the sides never up and down var pushDir : Vector3 = Vector3(hit.moveDirection.x, 0, hit.moveDirection.z); // If you know how fast your character is trying to move, // then you can also multiply the push velocity by that. // Apply the push body.velocity = pushDir * pushPower; }
相关文章推荐
- Unity两个物体发生碰撞的条件
- unity 所有碰撞器(触发器),碰撞条件、结果,触发条件、结果。。。以及碰撞函数、触发函数的调用。
- JavaScript 函数调用规则和if条件判断
- javascript 函数调用规则和IF条件判断
- 调用一个函数 三个值 一个数输出的字符 另外两个是 行 列数(图)
- 两个以上gameobject同时调用同一函数时候transform代码中改变但是实际效果并不改变的诡异问题
- shell中两个函数(带参数)相互调用
- 函数传对象调用,为什么值没有发生变化?
- Unity--在C#脚本中调用JS脚本函数并传参
- 函数调用时发生了什么
- onclick 可以调用两个以上函数
- Mathematica 函数调用发生异常时停止计算
- 函数调用时,栈里到底发生了什么?
- 通过一个非法的指针或者NULL指针调用成员函数会发生什么?
- 解决类间成员函数调用的两个方法
- 编写两个函数,分别求由键盘输入两个整数的最大公约数和最小公倍数。用主函数调用这两个函数,并输出结果
- javascript 函数调用规则和IF条件判断
- 关于ogrebullet中如何判断两个物体何时碰撞的问题
- GridView调用setAdapter()函数时发生错误
- C++ 保存在两个cpp文件中函数,怎样声明才能互相调用?