Collider 碰撞器

所有碰撞器的基类。

如果一个对象带有碰撞器,需要在游戏中移动,那么你应该添加个Rigidbody组件给它。如果你不想该对象与其他对象有交互,刚体可以设置为运动学刚体(kinematic)。

变量说明
attachedRigidbody碰撞器附加的刚体。碰撞器会自动连接到这个刚体或它的任意父对象刚体。
bounds碰撞器框的对象。注意,如果碰撞器被禁用或该游戏对象没激活,边界盒值将返回空。
contactOffset该碰撞器的触点偏移值。那些碰撞器间的距离比它们的contactOffset值之和小将产生接触。该触点偏移值必须为正。触点偏移允许碰撞检测系统预判接触,即使对象稍微分开点。
enabled启用碰撞器将会碰撞其他碰撞器,禁用碰撞器就不会碰撞其他碰撞器。
isTrigger碰撞器是一个触发器?
material用于碰撞器的物理材质。
sharedMaterial该碰撞器的共享的物理材质。修改材质将改变所有碰撞器使用该材质的表面属性,大多数情况下你可以修改Collider.material替代。
公共方法说明
ClosestPointOnBounds到碰撞器的框最近的点。
Raycast投射一条射线(Ray),它忽略所有碰撞器,除了这个。
Messsage 消息说明
OnCollisionEnter当该collider/rigidbody开始碰到另一个rigidbody/collider时OnCollisionEnter被调用。
OnCollisionExit当 collider/rigidbody停止碰撞另一个 rigidbody/collider时,OnCollisionExit被调用。
OnCollisionStay每当该collider/rigidbody碰到其他rigidbody/collider,将在每帧调用OnCollisionStay。
OnTriggerEnter当碰撞器进入触发器时OnTriggerEnter被调用。
OnTriggerExit当该碰撞器停止接触触发器时,OnTriggerExit被调用。也就是说,当碰撞器离开触发器时,调用OnTriggerExit。
OnTriggerStay每当碰撞器从进入触发器,几乎每帧调用OnTriggerStay。

示例:

Collider.ClosestPointOnBounds 在框上最近的点

到碰撞器的框最近的点。

当应用于爆炸伤害,这能用于计算伤害点数。

  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour {
  4. public float hitPoints = 100.0F;
  5. public Collider coll;
  6. void Start() {
  7. coll = GetComponent<Collider>();
  8. }
  9. void ApplyHitPoints(Vector3 explosionPos, float radius) {
  10. // The distance from the explosion position to the surface of the collider.
  11. Vector3 closestPoint = coll.ClosestPointOnBounds(explosionPos);
  12. float distance = Vector3.Distance(closestPoint, explosionPos);
  13. // The damage should decrease with distance from the explosion.
  14. float damage = 1.0F - Mathf.Clamp01(distance / radius);
  15. hitPoints -= damage * 10.0F;
  16. }
  17. }

Collider.Raycast 射线投射

public bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance);

Parameters参数
rayThe starting point and direction of the ray.射线的开始点和方向。
hitInfoIf true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).\如果返回真,hitInfo将包含更多关于碰撞器碰到哪里的信息(参见RaycastHit)
distanceThe length of the ray.\射线的长度。

返回布尔(bool)值,当射线和任何碰撞器相交时,返回true,否则为false。也就是说,当射线碰触到任何碰撞器时返回真,否则返回假。

  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour {
  4. public Collider coll;
  5. void Start() {
  6. coll = GetComponent<Collider>();
  7. }
  8. void Update() {
  9. if (Input.GetMouseButtonDown(0)) {
  10. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  11. RaycastHit hit;
  12. // 投射一条射线(Ray),它忽略所有碰撞器,除了这个。
  13. if (coll.Raycast(ray, out hit, 100.0F))
  14. transform.position = ray.GetPoint(100.0F);
  15. }
  16. }
  17. }