尝试在Unity中的鼠标位置启动



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

问题是我不知道该怎么做。我还是试过了,这是我想出的代码。

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语句中执行多个语句,则需要用花括号{}括起一个作用域。否则,if.将只考虑if之后的第一个语句

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

你可能是这个意思:

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

最新更新