Unity Prefab 产生不正确的旋转

Unity Prefab spawn incorrect rotation

我有以下简单的预制件:

当我将它添加到场景中时,它看起来像这样:

非常整洁!

然后我的角色上有以下脚本:

public class MageController : MonoBehaviour {
    public GameObject Spell;
    public float SpellSpeed;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.H)) {
            GameObject newSpell = Instantiate(Spell);
            newSpell.transform.position = transform.position;
            newSpell.transform.rotation = Quaternion.LookRotation(transform.forward, transform.up);
            Rigidbody rb = newSpell.GetComponent<Rigidbody>();
            rb.AddForce(newSpell.transform.forward * SpellSpeed);
        }
    }
}

目标当然是确保 fireball 正确生成(尾巴在后面)

当我站在 0.0.0 时这有效;它看起来像这样:

但是,如果我转过来,它看起来像这样:

如你所见,火球的旋转是不正确的(在上面错误的图像中它正在飞离我,但是尾巴在前面)。

我做错了什么?如何确保尾巴始终正确放置?

按照PlantProgrammer的指导更新 它仍然转动不正确:(

看下图!

在实例化火球时,您想使用玩家的前进方向而不是旋转。 (记住:脚本中的 transform 是玩家变换而不是火球变换。)检查 https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html。 LookRotation 将 return 基于玩家的前向和向上向量的旋转。

GameObject newSpell = Instantiate(Spell);
newSpell.transform.position = transform.position;
newSpell.transform.rotation = Quaternion.LookRotation(transform.forward, transform.up);

不是你的问题的一部分,但我也建议让火球朝它自己而不是玩家的前进方向飞行(因为这为以后的修改留下了更多空间)

rb.AddForce(newSpell.transform.forward * SpellSpeed);