碰撞檢測 BoxCollider 的特殊實現

2021-06-28 08:45:15 字數 1102 閱讀 5014

當做觸發器的collider檢測,可以通過 

private void ontriggerstay(collider collider);

private void ontriggerenter(collider collider);

private void ontriggerexit(collider collider);

來實現,當有物體與當前觸發器碰撞時候自動呼叫ontriggerenter(),當物體在觸發器內容時候自動呼叫ontriggerstay(),當物體離開觸發器時候自動呼叫ontriggerexit(),

但是當處於觸發器內部的物體消失(被消滅,被殺死  deactive)時候,這個物體就不會觸發ontriggerexit,有興趣的同學可以自己測試一下。

所以當我們需要實現乙個這樣的效果:

當有目標物體進入觸發器內部的時候就發出乙個進入的事件,之後當觸發器內部沒有物體的的時候再發出乙個退出的事件。

注意這裡觸發器內部沒有物體是在先有進入物體的條件下,所以當使用ontriggerenter 和ontriggerexit 來發出事件時候就不正確了,因為當乙個物體進入觸發器 發出了進入的事件,但是它被deactive了,此時觸發器內部沒有物體,但是卻不會發出退出事件。

我的實現方法是使用乙個記時裝置,使用協同程式,當觸發進入事件

之後開啟記時裝置,

這個程式的實現為:

ienumerator chacktarget()

}}

在ontriggerstay裡檢測到物體停留就為 _chacknum賦值,當ontriggerstay 不在執行時候,計時器就會不斷削減 _chacknum 最後小於0呼叫退出方法。

對了這個方法說一下,如果在觸發器內部有物體的話,這個方法會每一幀被呼叫一次。

private void ontriggerenter(collider collider)

}private void ontriggerstay(collider collider)

}

如此實現,可以保證在乙個進入和退出過程中只有乙個計時程式在執行,在觸發器中沒有物體後的1秒鐘內自動發出退出的訊息。

碰撞檢測 膠囊體碰撞檢測

膠囊體 給定一條線段l,所有道l的距離為r的點的集合。由定義可知,膠囊體由半徑r和線段l標識。檢測兩個膠囊體是否發生碰撞,即檢測兩條線段l1 l2的最短距離d是否大於l1 l2的半徑r1 r2之和,d r1 r2 則未碰撞,否則發生碰撞。設線段l1端點為a1 a2,線段l2端點為b1 b2,號表示兩...

Unity碰撞檢測

碰撞個必要條件為兩個角色必須都掛載 rigibody 剛體元件,至少乙個角色掛載 collider指令碼 第一種 觸發器,必須開啟 collider的 istrigger 為 true 兩個碰撞物件會相互穿過 void ontriggerenter collider collider 開始觸發器 v...

cocos碰撞檢測

兩個矩形的碰撞檢測,主要看boundingbox是否接觸 rect rc1 spriteauto getboundingbox rect rc2 spritectrl getboundingbox if rc1.intersectsrect rc2 則認為碰撞 兩個圓的碰撞檢測,看圓心距離 poin...