• 您的位置:首頁 > 新聞動態(tài) > Unity3D

    unity的碰撞檢測詳細(xì)解釋

    2018/3/5??????點擊:
    1.[AddComponentMenu("MyGame/Player")] //在Component菜單中加入“MyGame/Player”選項
    2.Time.deltaTime表示每幀的經(jīng)過時間,那些需要每幀做增減變動的數(shù)值都需要乘上Time.deltaTime
    3.MonoBehaviour的派生類不能使用構(gòu)造函數(shù)初始化
    4.unity的游戲體只能使用Instantiate函數(shù)實例化,不能使用new
    5.OnTriggerEnter函數(shù)觸發(fā)條件:首先兩個物體都要加碰撞體,被碰撞的物體必須勾選Is Trigger使其監(jiān)測觸發(fā)(不要加剛體),負(fù)責(zé)碰撞的物體必須加上剛體來觸發(fā)被碰撞物體(加上剛體才擁有了觸發(fā)別人的作用,不要勾選Is Trigger)。
    或者負(fù)責(zé)碰撞的物體勾選Is Trigger使其監(jiān)測觸發(fā)(不要加剛體),然后被碰撞的物體加上剛體。(不要勾選Is Trigger)


    6.OnCollisionEnter(碰撞瞬間)函數(shù)和OnCollisionExit(離開)調(diào)用條件:首先兩個物體都要加碰撞體,且Is Trigger(因為勾選了它,則碰撞失效)都必須勾掉,另外:剛體碰非剛體會碰撞(這里碰撞指的是調(diào)用碰撞函數(shù)),非剛體碰剛體不會碰撞(詳細(xì)來說就是:運(yùn)動中的剛體碰非剛體,則會調(diào)用被撞物體和撞物體的OnCollisionEnter系列函數(shù)),OnCollisionStay(接觸)函數(shù)調(diào)用條件:兩個滿足條件的物體挨著的時候就會調(diào)用OnCollisionStay
    7.Is Trigger和Is Kinematic屬性詳解
    Is Trigger:選中Is Trigger開啟觸發(fā)器(觸發(fā)器的范圍則是碰撞的范圍),則碰撞屬性失效了
    Is Kinematic:選中Is Kinematic開啟運(yùn)動學(xué)狀態(tài)(一切物體保持靜止或保持勻速向前運(yùn)動,除非有外力影響它的狀態(tài),這里的運(yùn)動學(xué)狀態(tài)指的是勻速向前運(yùn)動,牛頓大俠的理論)。如選中,該物體不會受到外力,但是需要注意的是碰撞還在(碰撞不屬于剛體組件,它是在碰撞體組件里)
    注:1.角色控制器(即Character Controller)不發(fā)力不受力但是可以被由代碼施加的力推動,,如果加Rigidbody組件,則這兩個會沖突(這是unity中非自然的一部分)
    2.運(yùn)動學(xué)剛體發(fā)力不受力
    3.剛體發(fā)力且受力
    4.有時候碰撞可以產(chǎn)生反作用力,比如角色控制器可以通過碰撞給一個運(yùn)動中的剛體反作用力
    5.剛體靜止時,則會進(jìn)入休眠狀態(tài),休眠狀態(tài)中剛體屬性不生效,比如阻力,重力,摩擦力。如何激活剛體使其喚醒:給它力,讓它平移等。(這是unity中非自然的一部分)
    6.現(xiàn)實生活中,先有往某個方向的力才會有反方向的阻力,而且一般情況下阻力比該方向的力小,但在unity中,阻力是可以事先設(shè)置的,當(dāng)阻力大于作用力時,物體會向阻力的方向運(yùn)動,是不是很反自然?(這是unity中非自然的一部分)
    7. 如果兩個物體都不是剛體,都有碰撞體,結(jié)果穿透,都不會調(diào)用碰撞函數(shù)
    8.物體1是動力學(xué)剛體且有碰撞體,物體2沒有剛體有碰撞體,結(jié)果穿透,都不會調(diào)用碰撞函數(shù)
    9.物體1是動力學(xué)剛體且有碰撞體,物體2有剛體有碰撞體,結(jié)果碰了,調(diào)用碰撞函數(shù)(不同情況調(diào)用不同函數(shù)。比如速度不同,調(diào)用函數(shù)不同[比如速度過快會穿過去])

    表格:(針對于OnCollisionEnter系列函數(shù),默認(rèn)都有碰撞體,重力都取消了,表格列出的現(xiàn)象可能片面)


    Cube

    Sphere

    現(xiàn)象

    剛體

    剛體

    動力學(xué)

    運(yùn)動狀態(tài)

    剛體

    剛體

    動力學(xué)

    運(yùn)動狀態(tài)

    互相穿透不干擾

    互相穿透不干擾

    碰撞檢測,且Cube不會被撞開

    碰撞檢測,且Cube不會被撞開

    互相穿透不干擾

    互相穿透不干擾

    碰撞檢測,且Sphere不會被撞開

    碰撞檢測,且相互撞開

    碰撞檢測,且Sphere隨Cube動

    碰撞檢測,且Sphere不會被撞開

    碰撞檢測,且Sphere不會被撞開

    碰撞檢測,且Cube不會被撞開

    嵌入時,碰撞檢測,且Cube不會被撞開

    互相穿透不干擾

    嵌入時,互不干擾

    嵌入時,碰撞檢測,互相撞開

    碰撞檢測,且Cube隨Sphere動

    嵌入時,碰撞檢測,Sphere不會被撞開

    互相穿透不干擾

    互相穿透不干擾

    互相穿透不干擾


    8.this.transform.parent = surface.transform; //改變該物體(this.transform)的父級,父物體為surface.transform處的物體