所以我将此代码附加到Quad。
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 :(得分:0)
可能你必须向所有对象添加碰撞器,因为OnMouse事件基于碰撞。以下是详细信息:Unity Docs - OnMouseDown
编辑:经过一些会谈,我们发现问题是由Instantiate方法引起的。
总是一种更好的方法来填充Instantiate方法中的所有参数,例如
Instantiate(prefab, Vector3.zero, Quaternion.Identity)
如果需要,可以在实例化对象后更改任何这些参数。
答案 1 :(得分:0)
有很多可能的原因。
如果没有任何帮助,您应该实现IPointerDownHandler接口并使用它而不是OnMouseDown。