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

    unity碰撞檢測要點總結(jié)

    2018/8/7??????點擊:

    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ā)(不要加剛體),負責(zé)碰撞的物體必須加上剛體來觸發(fā)被碰撞物體(加上剛體才擁有了觸發(fā)別人的作用,不要勾選Is Trigger)。
    或者負責(zé)碰撞的物體勾選Is Trigger使其監(jiān)測觸發(fā)(不要加剛體),然后被碰撞的物體加上剛體。(不要勾選Is Trigger)
    7.OnCollisionEnter(碰撞瞬間)函數(shù)和OnCollisionExit(離開)調(diào)用條件:
    1.首先兩個物體都要加碰撞體,
    且Is Trigger(因為勾選了它,則碰撞失效)都必須勾掉
    另外:剛體碰非剛體會碰撞(這里碰撞指的是調(diào)用碰撞函數(shù)),非剛體碰剛體不會碰撞(詳細來說就是:運動中的剛體碰非剛體,則會調(diào)用被撞物體和撞物體的OnCollisionEnter系列函數(shù))
    OnCollisionStay(接觸)函數(shù)調(diào)用條件:兩個滿足條件的物體挨著的時候就會調(diào)用OnCollisionStay
    8.Is Trigger和Is Kinematic屬性詳解
    Is Trigger:選中Is Trigger開啟觸發(fā)器(觸發(fā)器的范圍則是碰撞的范圍),則碰撞屬性失效了
    Is Kinematic:選中Is Kinematic開啟運動學(xué)狀態(tài)(一切物體保持靜止或保持勻速向前運動,除非有外力影響它的狀態(tài),這里的運動學(xué)狀態(tài)指的是勻速向前運動),如選中,該物體不會受到外力,但是需要注意的是碰撞還在(碰撞不屬于剛體組件,它是在碰撞體組件里)
    注:

    1.角色控制器(即Character Controller)不發(fā)力不受力但是可以被由代碼施加的力推動,,如果加Rigidbody組件,則這兩個會沖突(這是unity中非自然的一部分)
    2.運動學(xué)剛體發(fā)力不受力
    3.剛體發(fā)力且受力
    4.有時候碰撞可以產(chǎn)生反作用力,比如角色控制器可以通過碰撞給一個運動中的剛體反作用力
    5.剛體靜止時,則會進入休眠狀態(tài),休眠狀態(tài)中剛體屬性不生效,比如阻力,重力,摩擦力。如何激活剛體使其喚醒:給它力,讓它平移等。(這是unity中非自然的一部分)
    6.現(xiàn)實生活中,先有往某個方向的力才會有反方向的阻力,而且一般情況下阻力比該方向的力小,但在unity中,阻力是可以事先設(shè)置的,當(dāng)阻力大于作用力時,物體會向阻力的方向運動,是不是很反自然?(這是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ù)不同[比如速度過快會穿過去])
    10.this.transform.parent = surface.transform;//改變該物體(this.transform)的父級,父物體為surface.transform處的物體