unity 2d碰撞/ui組件碰撞


首先,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...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM