使用Transform.lookat()基于表示forward的不同向量。

时间:2015-07-28 06:12:10

标签: c# unity3d

在unity3D中,我试图定位一个胶囊,使y轴指向另一个游戏对象。基本上我正在尝试使用vector3.up而不是vector3.forward。

无论如何都要调整Transform.lookat()来实现这个目的吗?或者我应该使用另一种功能吗?

4 个答案:

答案 0 :(得分:0)

你可以尝试这个gameObject.transform.LookAt(targetTransform,gameObject.transform.up);通过这个游戏,对象将指向目标对象。

答案 1 :(得分:0)

添加Nain的答案,当你想让向量指向目标时,尝试传递前向向量的负数,即

gameObject.transform.LookAt(targetTransform,-1 * gameObject.transform.forward);

这应该可以得到预期的结果,因为现在考虑向上矢量是后向量,对象现在已经被激活了。

答案 2 :(得分:0)

根据Transform.LookAt Documentation,我们可以看到第二个参数是控制worldUp。而你想要做的是,' transform.up'指着前进的方向。因此,根据Unity Coordinate System中的左手规则,你的前锋必须指向下方。这意味着您的transform.forward的否定必须用作WorldUp参数。

示例:

transform.LookAt(targetTransform, -transform.forward);

答案 3 :(得分:-1)

此代码使用lookDirection代替lookPostion,但是您可以轻松地从位置direction = lookAtPos-lookerPos计算方向

//Makes the gameObject look towards "lookDirection" with customizable "lookerForwardVector"
     public static Quaternion LookAtDirection(GameObject looker, Vector3 lookAtDirection, Vector3 lookerForwardVector)
     {
         Transform inputTransform = looker.transform;
         inputTransform.rotation = Quaternion.LookRotation(lookAtDirection); //calculating look rotation

         //Changes the LookAt alignment, like you can use "Vector3.up" vector instead of default "Vector3.forward"
         inputTransform.Rotate(GetForwardVectorAngleOffest(lookerForwardVector), Space.Self);

         return inputTransform.rotation;
     }

     static Vector3 GetForwardVectorAngleOffest(Vector3 forwardVector)
     {
         if(forwardVector == Vector3.up)
             return new Vector3(90, 0, 0);

         if (forwardVector == Vector3.right)
             return new Vector3(0, -90, 0);

         return new Vector3(0, 0, 0); ;
     }