首先,ugui的碰撞是可以用Collision2D跟Rigidbody2D實現的(就跟3D碰撞一樣)。之前試過不可以主要問題正在於Collision2D以及Rigidbody的設置上。
碰撞雙方都添加Collider2D但是沒有調整碰撞器的大小。新建一個image添加box collider2d,它的size為x:1,y:1,而image默認的width和height為100...
然后是添加Rigidbody2D
Simulated是一定要勾選的,如果這個不勾選Collider 2D和Joint 2D 就沒有效果。如果在運行時勾選了Simulated會看到對象受重力影響(也就是往下掉),所以這里要把Linear Drag, Angular Drag,Gravity Scale這幾個力的作用設為0.
然后就要根據情況來設定你是要用trigger還是collision了。
這里就跟3d一樣了,假如用trigger,要將碰撞雙方中的其中一個將Collider的is trigger勾選,勾選誰是要求而定。is trigger勾選之后,它的位置就不會用碰撞影響了。
腳本檢測事件用(雙方都要添加collider2d,至少一方添加rigidbody2d)
// 開始接觸 //void OnTriggerEnter2D(Collider2D collider) { // Debug.Log("開始接觸"); // Debug.Log (collider.name); //} //// 接觸結束 //void OnTriggerExit2D(Collider2D collider) {
if(collider!=null)
//{
// Debug.Log("接觸結束"); //Debug.Log (collider.name); //}
//}
//// 接觸持續中 //void OnTriggerStay2D(Collider2D collider) { // Debug.Log("接觸持續中"); // Debug.Log (collider.name); //}
只要對象一直在勾選is trigger的對象的collision范圍之內,OnTriggerStay2D就會一直觸發。
如果要用collision來檢測的話,腳本用
//void OnCollisionEnter2D(Collision2D coll) { // Debug.Log ("-------開始碰撞------------"); // Debug.Log(coll.gameObject.name); //} //void OnCollisionStay2D(Collision2D coll) { // Debug.Log ("------正在碰撞-------------"); // Debug.Log(coll.gameObject.name); //} //void OnCollisionExit2D(Collision2D coll) { // Debug.Log ("------結束碰撞-------------"); // Debug.Log(coll.gameObject.name); //}
這時候is trigger就不要勾選了,也是雙方都要添加collider2d,至少一方添加rigidbody2d,不要忘了勾選rigidbody2d下的simulated...