• Collider 碰撞器
    • 示例:

    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. }