1

我正在制作一个自上而下的射击游戏,玩家使用 WASD 上下左右移动并不断指向鼠标。我希望移动与玩家指向的方向无关,但现在情况并非如此。

这是我的代码:

void Update() 
{
  float igarH = Input.GetAxisRaw("Horizontal");
  float igarV = Input.GetAxisRaw("Vertical");
  if (igarH > 0.5f || igarH < -0.5f) 
  {
    transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f));
  }
  if (igarV > 0.5f || igarV < -0.5f)
  {
    transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f));
  }

  // Point toward mouse
  Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
  float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
  Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
  transform.rotation = rotation;
}

抱歉缩进不好,很难弄清楚该网站希望我如何进行标记,而且我是该网站的新手。

为什么玩家的移动会根据我的鼠标位置而有所不同?无论如何,我希望运动是相同的。

请保留与 Unity2D 而不是 3D 相关的所有答案。

4

1 回答 1

0

Transform.Translate有一个可选参数relativeTo,您可以选择是否希望对象相对于其自己的坐标系或世界坐标系移动。

只需将您的电话更改为:

if (igarH > 0.5f || igarH < -0.5f) {
  transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f), Space.World);
}
if (igarV > 0.5f || igarV < -0.5f) {
  transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f), Space.World);
}
于 2018-07-08T08:09:11.433 回答