所以我做了一个马里奥制造者“克隆”,我想要它实例化对象,当我掌握控制和拖动。它制造了几乎无限的瓷砖。我希望它只在新位置与对象的旧位置相同的情况下才能生成一个对象。所有的东西都会被一个1×1块的网格所包围。
public GameObject tilePrefab;
void OnMouseDrag(){
Vector2 pos = Input.mousePosition;
pos = Camera.main.ScreenToWorldPoint (pos);
pos.x = Mathf.Round(pos.x);
pos.y = Mathf.Round(pos.y);
transform.position = pos;
if (Input.GetKey (KeyCode.LeftControl)) {
if (transform.position != GameObject.Find ("SomePrefabName").transform.position) {
GameObject myGameObject = Instantiate (tilePrefab) as GameObject;
myGameObject.name = "SomePrefabName";
}
}
}


发布于 2017-05-08 22:59:02
试着改变如下:
public GameObject tilePrefab;
void OnMouseDrag(){
Vector2 pos = Input.mousePosition;
pos = Camera.main.ScreenToWorldPoint (pos);
pos.x = Mathf.Round(pos.x);
pos.y = Mathf.Round(pos.y);
transform.position = pos;
var hitColliders = Physics.OverlapSphere(transform.position, 1);
if (Input.GetKey (KeyCode.LeftControl)) {
if (hitColliders.Length == 0) {
GameObject myGameObject = Instantiate (tilePrefab) as GameObject;
myGameObject.name = "SomePrefabName";
}
}
}在这里,我们使用Physics.OverlapSphere来检测是否有对撞机在想要的位置,如果不是在本例中,我们继续进行代码
https://stackoverflow.com/questions/43853358
复制相似问题