2017-05-08 203 views
0

因此,我正在制作一个马里奥制造商“克隆”,我希望它实例化对象,当我举行控制和拖动。它使几乎无限的瓷砖。如果新位置与对象的旧位置相同,我希望它只生成一个对象。一切由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"; 
      } 
     } 
    } 

Before Drag

After Drag

回答

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; 
     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来检测,如果我们在想要的位置有一个对撞机,如果不是,在这种情况下,我们继续执行代码

+0

理论上应该有效,但是当我这样做的时候似乎并没有发生。我尝试改变价值观,我所得到的更加分散。 – racorse

+0

对不起,我知道你可能已经修复了这个问题,但是问题可能会通过将Input.GetKey更改为Input.GetKeyUp –