2015-10-20 36 views
1

因此,我將此代碼附加到Quad。有時Unity中的OnMouseDown()方法執行,有時它不會

public class ShapeGrid : MonoBehaviour { 

public GameObject[] shapes; 

void Start(){ 
    GameObject[,] shapeGrid = new GameObject[3,3]; 
    StartCoroutine(UpdateGrid()); 
} 

IEnumerator UpdateGrid(){ 
    while (true) { 
     SetGrid(); 
     yield return new WaitForSeconds(2); 
    } 
} 

void SetGrid(){ 
    int col = 3, row = 3; 
    for (int y = 0; y < row; y++) { 
     for (int x = 0; x < col; x++) { 
      int shapeId = (int)Random.Range (0, 4.9999f); 
      GameObject shape = Instantiate (shapes[shapeId]); 
      shape.AddComponent<ShapeBehavior>(); 
      Vector3 pos = shapes [shapeId].transform.position; 
      pos.x = (float)x*3; 
      pos.y = (float)y*3; 
      shapes [shapeId].transform.position = pos; 
     } 
    } 
} 

上面的腳本在運行時生成的遊戲對象,向其中我分配另一個腳本:

public class ShapeBehavior : MonoBehaviour { 

    void OnMouseDown(){ 
     Debug.Log ("Destroy"); 
     Destroy (gameObject); 
    } 
} 

的問題是,有時onmousedown事件()執行,有時它沒有。我無法弄清楚爲什麼,以及如何解決它。

回答

0

也許你必須添加碰撞器到所有的對象,因爲OnMouse事件是基於碰撞。這裏是詳細的信息:Unity Docs - OnMouseDown

編輯:經過一些談判後,我們發現問題是由實例化方法引起的。

這是百達一個更好的方式來填補所有的實例化方法參數e.g

Instantiate(prefab, Vector3.zero, Quaternion.Identity)

如果你願意,你可以實例化對象後,更改其中的任何參數。

+0

ShapeGrid類中的形狀已經有一個碰撞器。因此,如果我在每個克隆的遊戲對象上添加碰撞器,我都會收到此錯誤:無法將組件'BoxCollider'添加到圓圈(克隆),因爲它與現有的'BoxCollider2D'派生組件衝突! – jeanl

+0

你說「有時候」,你可以檢查問題是否存在於同一個對象上,或者是這個隨機的東西嗎?你也可以檢查圖層,對象不能在忽略Raycast圖層上。 –

+0

一直試圖找到一種模式。我認爲這是隨機的。我不認爲我使用Raycasts – jeanl

0

有很多可能的原因。

  1. 對撞機衝突。 OnMouseDown()在後臺進行光線投射。如果鼠標位置的光線照到另一個對撞機(可見或不可見),則不會得到OnMouseDown()調用。
  2. 與相機的距離。 OnMouseDown實現使用光線投射的深度限制,這可能會導致對象不註冊點擊。
  3. RigidBody。如果在層次結構中存在某個RigidBody,OnMouseDown將完全不同。它實際上不會在被點擊的對象上調用OnMouse函數,而是將其稱爲RigidBody的遊戲對象,而不是另一個bug。
  4. 碰撞失蹤。當用戶在GUIElement或Collider上按下鼠標按鈕時會調用OnMouseDown,因此必須將碰撞器添加到對象中。
  5. 多臺攝像機。由於有多臺攝像機進行射線照相,可能會導致問題。
  6. 碰撞器碰撞鼠標位置上的另一個碰撞器。
  7. 只是野生的bug。關閉並重新打開Unity編輯器是最後的希望。

如果沒有這個不能幫助您應該實現IPointerDownHandler接口並使用它而不是OnMouseDown。

+0

1)我不認爲這是與位置,因爲有時它在一個特定的位置,有時不工作。 2)再次,不是與位置。 3)沒有任何物體的剛性體。 4)對象已經有對撞機。 5)我只使用1個相機。 6)我仍然不認爲這是位置? 7)仍然沒有。 :(謝謝你,但 – jeanl

相關問題