我有以下简单的预制件:
当我将其添加到我的场景时,它看起来像这样:
非常整洁!
然后我的角色上有以下脚本:
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的指导进行更新 它仍然不正确:(
请看下面的图片!
答案 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);