繁体   English   中英

尝试在 Unity 中启动鼠标 position

[英]Trying to launch in the mouse position in Unity

我试图让玩家角色根据发射范围向鼠标方向发射。

问题是我不知道 go 如何做到这一点。 无论如何我都尝试过,这是我想出的代码。

public class playershoot : MonoBehaviour
{
   public float shootRange = 5f;

   Vector2 shootDir;
   Vector2 lookDir;
   public Rigidbody2D rb;
   public Camera cam;

   Vector2 mousePos;
   void FixedUpdate()
   {
       System.Diagnostics.Debug.WriteLine("huzza!");
       mousePos = cam.ScreenToWorldPoint(Input.mousePosition);

       if (Input.GetMouseButtonDown(0))
           System.Diagnostics.Debug.WriteLine("huzza!");
           lookDir = mousePos - rb.position;
           rb.MovePosition(rb.position + lookDir * shootRange);
    }
}

我知道它看起来真的很糟糕,一旦我开始工作,我会经常清理它。 不幸的是,我从来没有达到那个地步。 有小费吗?

关于您的问题,我们没有太多背景信息,但是if声明中有一件事引起了您的注意。

void FixedUpdate()
{
    System.Diagnostics.Debug.WriteLine("huzza!");
    mousePos = cam.ScreenToWorldPoint(Input.mousePosition);

    if (Input.GetMouseButtonDown(0))
       System.Diagnostics.Debug.WriteLine("huzza!");
       lookDir = mousePos - rb.position;
       rb.MovePosition(rb.position + lookDir * shootRange);
}

在 c# 中,如果要在一个 if 语句中执行多个语句,则需要用大括号 {} 将 scope 括起来。 否则,只有 if 之后的第一条语句才会被 if 考虑。

使用此代码,只有System.Diagnostics.Debug.WriteLine("huzza;"); Input.GetMouseButtonDown(0)为真时将有条件地执行。 以下两行在 if 之外执行。 这意味着,无论是否捕获输入, rb.MovePosition都会通过更新在每一帧上发生。

你可能是这个意思:

    if (Input.GetMouseButtonDown(0))
    {
       System.Diagnostics.Debug.WriteLine("huzza!");
       lookDir = mousePos - rb.position;
       rb.MovePosition(rb.position + lookDir * shootRange);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM