如何在Unity中旋转对象来面对另一个对象?

我有一个问题,我无法适当地旋转我的子弹,每当我产卵一个。 我目前有一个胶囊预制我正在testing。 我用下面的代码产生它。

GameObject b = (GameObject)Instantiate(Resources.Load<GameObject>("Prefabs/Bullet")); 

我正在使用下面的代码尝试定位子弹,使其沿着产卵位置和目标中心之间的假想射线。

  void Start() { go = InputController.instance.hit.transform.gameObject; transform.position = new Vector3(transform.parent.position.x, transform.parent.position.y - 5, transform.parent.position.z); } void Update () { transform.LookAt(go.transform.position); Vector3 rotation = transform.eulerAngles; //THIS IS THE LINE I NEED TO ALTER transform.rotation = Quaternion.Euler(rotation); transform.position = Vector3.MoveTowards(transform.position, go.transform.position, SPEED * Time.deltaTime); Debug.DrawRay(transform.position, transform.forward * 10000000, Color.red); //DEBUGGING Debug.DrawRay(transform.position, transform.up * 1000000, Color.green); //DEBUGGING } 

基本上,我遇到的问题是如何基于我有两个可用来计算对象的旋转。

正如你所看到的,我似乎无法计算的线是Update方法的第二行,它需要做的是使对象的Vector3.up方向沿Vector3方向运行,目标位置。

有趣的是,子弹已经水平放置,但LookAt方法改变了旋转,所以我只需要修复它,但我不确定在math上做到这一点。

LookAt定义:

  public void LookAt(Transform target, Vector3 worldUp = Vector3.up); 

默认的方向, Vector3.up ,这是不正确的,你的情况(这就是为什么子弹向上)。 使用:

 transform.LookAt(go.transform.position, Vector3.right);