【问题标题】:Move a bullet in its rotation direction沿其旋转方向移动子弹
【发布时间】:2016-12-06 19:41:13
【问题描述】:

我正在创建一个自上而下的 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 游戏中它看起来好像是静止不动的。如何解决?

【问题讨论】:

  • 除了transform.forward,你有没有尝试过其他方向?
  • 那么用transform.right 沿局部x 轴移动怎么样?

标签: unity3d rotation projectile


【解决方案1】:

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

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

  • 返回 Vector3(0, 0, -1) 的简写。
  • 向下写 Vector3(0, -1, 0) 的简写。
  • 用于编写 Vector3(0, 0, 1) 的正向简写。
  • 左简写 Vector3(-1, 0, 0)。
  • Vector3(1, 1, 1) 的一种简写方式。
  • Vector3(1, 0, 0) 的右简写。
  • up 写 Vector3(0, 1, 0) 的简写。
  • 写 Vector3(0, 0, 0) 的零速记。

编辑下面的评论:

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

这样想,假设您坐在办公桌前,办公桌是世界空间,您可以从自己的角度观察到 3 个维度。您可以看到左右(x 轴)、上下(y 轴)以及从您的视角向前(z 轴)。如果您想将回形针向前移动,它将是 Vector3.up,因为您向下注视 z 轴,但是如果您站立并向下看桌子(就像相机在世界空间上方),那么为了制作纸张剪辑向前(向上)移动,您将使用 Vector3.forward。

这就是为什么我要说明代表您的相机设置的原因,因为如果未指定,您的场景可以是任何排列。

【讨论】:

  • 我需要将“transform”更改为“Vector3”+ up。不过,我不明白“transform”和“Vector3”之间的区别。
  • 这实际上很有帮助。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多