沿其旋转方向移动子弹

Move a bullet in its rotation direction

我正在创建一个自上而下的 2D 游戏。这是让我的播放器实例化子弹的代码:

public GameObject bullet;
void Update () 
    {
        if (Input.GetButton("Fire1") && Time.time > nextFire)
        {
            nextFire = Time.time + fireRate;
            Instantiate(bullet, transform.position, transform.rotation);
        }   
    }

下面是附加到子弹上的脚本:

void Update () 
    {
        transform.Translate(transform.forward * Time.deltaTime * speed);
    }

子弹似乎只在其 Z 轴上移动,在 2D 游戏中它看起来好像静止不动。如何解决?

Vector3.forward 与执行 new Vector3(0, 0, 1) 相同,这意味着它将在 z 轴上为正。从下面选择代表您的相机设置的选项。

这是 Vector3 类型的静态助手列表:

  • 返回 Shorthand 用于写入 Vector3(0, 0, -1)。
  • 向下 Shorthand 用于写入 Vector3(0, -1, 0).
  • forward Shorthand 用于写入 Vector3(0, 0, 1).
  • 左 Shorthand 用于写入 Vector3(-1, 0, 0).
  • 一个 Shorthand 用于编写 Vector3(1, 1, 1).
  • 对 Shorthand 写 Vector3(1, 0, 0).
  • up Shorthand 用于写入 Vector3(0, 1, 0).
  • 零 Shorthand 用于写入 Vector3(0, 0, 0).

编辑以下评论:

Transform 是您的 GameObjects 位置、旋转和缩放。当您使用 translate 方法时,您正在使用 Vector3 沿某个方向移动 GameObject 的位置(在您的情况下调整为帧之间的 deltaTime),因此取决于方向(它是否在 X/Y/Z 轴上查看)相机的游戏对象相对于世界 space(通常,除非 relativeTo 被调整)并且具有特定的轴作为一个整体,你的游戏对象需要相对于那个 space.

移动

这样想,假设你坐在办公桌前,办公桌就是世界space,你可以从你的角度观察到的是 3 个维度。您可以看到左右(x 轴)、上下(y 轴)以及从您的角度向前看(z 轴)。如果你想向前移动一个回形针,它会是 Vector3.up 因为你盯着 z 轴,但是如果你站着向下看 table(就像相机在世界上方 space) 那么为了使回形针向前(向上)移动,你可以使用 Vector3.forward.

这就是为什么我说什么代表你的相机设置,因为如果没有指定,你的场景可以是任何排列。