Unity Prefab产生错误的旋转

时间:2017-01-07 16:08:11

标签: unity3d transform gameobject

我有以下简单的预制件:

enter image description here

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

enter image description here

非常整洁!

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

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时,这是有效的。它看起来像这样:

enter image description here

然而,如果我转身看起来像这样:

enter image description here

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

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

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

请看下面的图片!

enter image description here

1 个答案:

答案 0 :(得分:2)

在实例化火球时,你想要使用玩家的前进方向而不是它的旋转。 (请记住:脚本中的转换是播放器转换,而不是火球转换。)检查https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html。 LookRotation将根据玩家的前向和向上矢量返回旋转。

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

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

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