限制我可以在mousedown实例化的地方?

时间:2016-12-19 23:13:28

标签: c# unity3d instantiation onmousedown

我的脚本将对象放在鼠标的位置,无论位置如何。

我想限制将对象放置在玩家精灵周围的小区域的位置。

如果鼠标X大于(X位置+一点点)的玩家X而不是对象不会实例化。我已经尝试了沿着这些方面的陈述,但却无法让它发挥作用。

这是展示位置脚本。

 public GameObject seedlings;
 public GameObject player;
 Vector3 mousePOS = Input.mousePosition;

 // Use this for initialization
 void Start(){}
 // Update is called once per frame
 void Update()
 {
     PlantInGround();
 }
 void PlantInGround()
 {
     Vector3 mousePOS = Input.mousePosition;

         if (Input.GetMouseButtonDown(0))
         {
             mousePOS.z = +12;
             mousePOS = Camera.main.ScreenToWorldPoint(mousePOS);
             Instantiate(seedlings, (mousePOS), Quaternion.identity);
             Debug.Log(mousePOS);
         }
 }

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

检查您的幼苗位置是否接近您的玩家位置:

float maxDist = 3F; //radius within the player that the seedling can be instantiated
if ( (mousePOS - player.transform.position).magnitude < maxDist )
{
  //Do Something
}

你可以比较距离的平方,因为magnitude涉及一个昂贵的Sqrt()调用,但鉴于你只是在鼠标点击时这样做,它应该不是很重要。

当然,您必须确保您的播放器距离相机的前视方向约12个单位..鉴于您正在这样做:

mousePOS.z = +12;
mousePOS = Camera.main.ScreenToWorldPoint(mousePOS);

答案 1 :(得分:0)

这就是最终的工作。留给别人。老实说,我不知道为什么坐标排成一行。感谢@Lincon的帮助。

公共类PlantItem:MonoBehaviour {

public GameObject seedlings;
public GameObject player;
Vector3 mousePOS = Input.mousePosition;

void Update()
{
    if (!Input.GetMouseButtonDown(0))
    {
        PlantInGround();
    }
}

void PlantInGround()
{
    Vector3 mousePOS = Input.mousePosition;

    mousePOS.z = +12;
    mousePOS = Camera.main.ScreenToWorldPoint(mousePOS);
    if (((player.transform.position.y < mousePOS.y + 0.5) && (player.transform.position.y > mousePOS.y - 1.5)) && ((player.transform.position.x < mousePOS.x + 1) && (player.transform.position.x > mousePOS.x - 1)))
    {
        Instantiate(seedlings, mousePOS, Quaternion.identity);

    }
}

}