【Unity3D入门教程】物理引擎之碰撞解析
Unity3D內(nèi)置物理引擎,可以模擬物理效果。典型的一個物理效果就是碰撞。本文將會針對最簡單的案例講述Unity3D的碰撞規(guī)律。
?
1 碰撞規(guī)律
首先在場景中創(chuàng)建一個Sphere和一個Cube,它們都是默認(rèn)帶有碰撞器的。
如果要讓物體受到物理控制,需要給它添加一個剛體組件。這時,物體將會受到重力影響,并且能夠與其他物體碰撞。
?
- 碰撞器的分類
碰撞器按外形可以分為BoxCollider、SphereCollider、CapsuleCollider、WheelCollider、MeshCollider等。這里我們以Box和Sphere 的Collider作為實例來展開敘述。
?
- 剛體
只帶有碰撞器而沒有剛體的物體,自己是不能響應(yīng)物體行為的。這類成為靜態(tài)碰撞器,適合作為墻體、地面和其他不動的物體。當(dāng)給物體添加了剛體后,物體就可以接受力和力矩,產(chǎn)生接近真實物體的表現(xiàn)。需要注意的是,如果要讓兩個物體發(fā)生碰撞,至少有一個物體要帶有剛體組件。
剛體組件中的Mass是質(zhì)量,Drag和Angular Drag是阻力和角阻力,這些數(shù)值都是可以影響碰撞效果的。UseGravity是重力開關(guān),打開就會響應(yīng)重力,關(guān)閉則不響應(yīng)。IsKinematic是運動學(xué)開關(guān),如果啟用,物體將不受物理引擎驅(qū)動,只能通過Transform來操作。下面的CollisionDetection默認(rèn)是Discrete(不連續(xù)檢測)。最下面是Constraints,可以設(shè)置限制剛體的運動。
?
2 碰撞實例
為了檢測碰撞和物體開關(guān),需要把下面的collider.cs腳本綁定到Cube上。
using UnityEngine; using System.Collections;public class collider : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//碰撞檢測void OnCollisionEnter(Collision colliderInfo){Debug.Log(colliderInfo.collider.name+"撞過來了!");}void OnCollisionExit(Collision colliderInfo){Debug.Log(colliderInfo.collider.name + "結(jié)束碰撞!");}void OnCollisionStay(Collision colliderInfo){Debug.Log(colliderInfo.collider.name + "處于碰撞中!");}//物理開關(guān)void OnTriggerEnter(Collider collider){Debug.Log("Trigger: "+collider.name +"進(jìn)入!");}void OnTriggerExit(Collider collider){Debug.Log("Trigger: " + collider.name + "離開!");}void OnTriggerStay(Collider collider){Debug.Log("Trigger: " + collider.name + "觸發(fā)中!");}}
對于已經(jīng)創(chuàng)建好的Cube和Sphere,它們自身就是帶有碰撞器的,我們給這兩個物體加上剛體。點擊對象的AddComponent,在下拉的菜單搜索中輸入Rigidbody,選擇并添加即可,剛體參數(shù)可以保持默認(rèn)。
(1)測試碰撞
不勾選Cube的BoxCollider的IsTrigger,運行游戲。用鼠標(biāo)拖到Sphere去碰撞Cube,可以看到如下信息:
(2)測試物理開關(guān)
勾選Cube的BoxCollider的IsTrigger,運行游戲。用鼠標(biāo)拖到Sphere去碰撞Cube,可以看到如下信息:
總結(jié)
以上是生活随笔為你收集整理的【Unity3D入门教程】物理引擎之碰撞解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Jetson Nano上挂载摄像头并用
- 下一篇: 乐视2 usb计算机连接,乐视手机怎么连