我正在创建一个自上而下的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游戏中看起来好像它静止不动。如何解决?
答案 0 :(得分:3)
Vector3.forward与新的Vector3(0,0,1)相同,这意味着它在z轴上是正的。从下面选择代表您的相机设置。
以下是Vector3类型的静态助手列表:
编辑以下评论:
变换是您的GameObjects位置,旋转和缩放。当您使用translate方法时,您正在使用Vector3在一个方向上移动GameObject的位置(在您的情况下调整为帧之间的deltaTime),因此取决于方向(是否在X / Y / Z轴上查看)游戏对象相对于世界空间(通常,除非调整relativeTo)并且具有特定的轴作为整体,你的GameObject需要相对于该空间移动。
以这种方式思考,比如你坐在办公桌前,桌子就是世界空间,从你的角度来看,你可以观察到的是3个维度。您可以向左和向右(x轴),向上和向下(y轴)以及从您的视角向前(z轴)看到。如果你想向前移动一个回形针,那就是Vector3.up,因为你盯着z轴,但是如果你站着看着桌子(就像相机在世界空间之上),那么为了制作纸张剪辑向前移动(向上)你会使用Vector3.forward。
这就是为什么我陈述了代表你的相机设置的原因,因为你的场景可以是任何安排,如果没有指定的话。