【Unity3D入門教程】物理引擎之碰撞解析

Unity3D內置物理引擎,可以模擬物理效果。典型的一個物理效果就是碰撞。本文將會針對最簡單的案例講述Unity3D的碰撞規律。

 

1 碰撞規律

首先在場景中創建一個Sphere和一個Cube,它們都是默認帶有碰撞器的。





如果要讓物體受到物理控制,需要給它添加一個剛體組件。這時,物體將會受到重力影響,並且能夠與其他物體碰撞。

 

  • 碰撞器的分類

碰撞器按外形可以分爲BoxCollider、SphereCollider、CapsuleCollider、WheelCollider、MeshCollider等。這裏我們以Box和Sphere 的Collider作爲實例來展開敘述。

 

  • 剛體

只帶有碰撞器而沒有剛體的物體,自己是不能響應物體行爲的。這類成爲靜態碰撞器,適合作爲牆體、地面和其他不動的物體。當給物體添加了剛體後,物體就可以接受力和力矩,產生接近真實物體的表現。需要注意的是,如果要讓兩個物體發生碰撞,至少有一個物體要帶有剛體組件。


剛體組件中的Mass是質量,Drag和Angular Drag是阻力和角阻力,這些數值都是可以影響碰撞效果的。UseGravity是重力開關,打開就會響應重力,關閉則不響應。IsKinematic是運動學開關,如果啓用,物體將不受物理引擎驅動,只能通過Transform來操作。下面的CollisionDetection默認是Discrete(不連續檢測)。最下面是Constraints,可以設置限制剛體的運動。

 

2 碰撞實例

爲了檢測碰撞和物體開關,需要把下面的collider.cs腳本綁定到Cube上。

using UnityEngine;
using System.Collections;

public class collider : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
    //碰撞檢測
    void OnCollisionEnter(Collision colliderInfo)
    {
        Debug.Log(colliderInfo.collider.name+"撞過來了!");
    }
    void OnCollisionExit(Collision colliderInfo)
    {
        Debug.Log(colliderInfo.collider.name + "結束碰撞!");
    }
    void OnCollisionStay(Collision colliderInfo)
    {
        Debug.Log(colliderInfo.collider.name + "處於碰撞中!");
    }
    //物理開關
    void OnTriggerEnter(Collider collider)
    {
        Debug.Log("Trigger: "+collider.name +"進入!");
    }
    void OnTriggerExit(Collider collider)
    {
        Debug.Log("Trigger: " + collider.name + "離開!");
    }
    void OnTriggerStay(Collider collider)
    {
        Debug.Log("Trigger: " + collider.name + "觸發中!");
    }

}


對於已經創建好的Cube和Sphere,它們自身就是帶有碰撞器的,我們給這兩個物體加上剛體。點擊對象的AddComponent,在下拉的菜單搜索中輸入Rigidbody,選擇並添加即可,剛體參數可以保持默認。


(1)測試碰撞

不勾選Cube的BoxCollider的IsTrigger,運行遊戲。用鼠標拖到Sphere去碰撞Cube,可以看到如下信息:


(2)測試物理開關

勾選Cube的BoxCollider的IsTrigger,運行遊戲。用鼠標拖到Sphere去碰撞Cube,可以看到如下信息:



發佈了65 篇原創文章 · 獲贊 268 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章