在unity3D中,我试图定位一个胶囊,使y轴指向另一个游戏对象。基本上我正在尝试使用vector3.up而不是vector3.forward。
无论如何都要调整Transform.lookat()来实现这个目的吗?或者我应该使用另一种功能吗?
答案 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); ;
}