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);
我有以下简单的预制件:
当我将它添加到场景中时,它看起来像这样:
非常整洁!
然后我的角色上有以下脚本:
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);