1

我在Unity中制作游戏。我的任务是当玩家按下“1”键时,它会向 player.transform.forward 位置射出一个球体,直到它与敌人相撞。

问题是,当球体被射击时,当它飞行时,我可以通过左右转动玩家来控制它的移动 X 值。所以球体和我一起移动,但它不应该。这当然是因为在Update()中,我将它移动到玩家面对的方向。如何使球体开始面向玩家方向,但在独立移动后?

这是移动球体的代码

private float speed = 4.0f;

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

2 回答 2

1

您可以保存它的初始“前进”方向并在之后引用它

public GameObject player;

private float speed = 4.0f;
private Vector3 direction;

private void Awake() //I used Awake() as example asuming you are instantiating the sphere, 
{                    //but you could set the value of the direction when you press "1" too

    direction = player.transform.forward;
}

void Update()
{
    transform.Translate(direction * Time.deltaTime * speed);
}
于 2020-02-24T11:38:01.670 回答
1

以正确的方向实例化它

Instantiate(rangedAttack, spawnPosition, player.transform.rotation);

现在它自己的前向向量指向与玩家相同的方向。

然后简单地做

private float speed = 4.0f;

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

注意 Translate默认情况下工作在Space.Self这个变换的本地空间中。您不想在此处传递世界空间向量,而只想在本地Z轴上移动!

如果你传入一个世界空间向量,你将需要通过Space.World

transform.Translate(vector, Space.World);
于 2020-02-24T12:14:30.847 回答