如何根据相机的 Y 旋转此对象的 Y?
How do I rotate the Y of this object according to the Y of the camera?
我想根据"Person/Camero"的Y轴旋转我的游戏对象"Person"的Y轴。我以为这行得通,但行不通,为什么行不通?我该如何解决?
此外,此脚本位于 "Person".
transform.rotation.y = GameObject.Find("Person/Camero").transform.rotation.y;
您永远不应该尝试用手旋转某些东西。而是找到增量并使用旋转功能。
试试这个:
var toRotate = GameObject.Find("Person/Camero").transform.rotation.ToAngleAxis() - transform.rotation.ToAngleAxis();
toRotate.x = 0;
toRotate.z = 0;
transform.Rotate(toRotate);
如果他看向相机而不是远离相机,请添加此行;
toRotate.y += 180;
祝你好运:)
您的代码有两个问题:
1。您是直接修改transform.rotation.y
。你不能这样做并且会得到如下编译时错误:
Cannot modify the return value of 'Transform.rotation' because it is
not a variable
您必须获得 transform.rotation
即 Quaternion
,修改 y
然后将修改后的 Quaternion
分配回 transform.rotation
。
像这样的东西应该编译
//Get rotation
Quaternion tempRot = transform.rotation;
//Modify the Y
tempRot.y = GameObject.Find("Person/Camero").transform.rotation.y;
//Assign back to transform.rotation
transform.rotation = tempRot;
但 不会 运行 正确。原因见下文#2。
2。 transform.rotation.y
字段以 Quaternion
形式返回,因此 GameObject.Find("Person/Camero").transform.rotation.y
。仅修改一个轴将 而不是 给您实际期望的结果,因为它是 Quaternion
。您必须改为使用 angles 来执行此操作。
这是使用 transform.localEulerAngles
或 transform.eulerAngles
属性而不是 transform.rotation
完成的。如果对象有父对象,则使用 transform.localEulerAngles
。
这是应该按预期编译和工作的内容:
//Get rotation in Angle deg
Vector3 tempAngle = transform.localEulerAngles;
//Modify the Y axis
tempAngle.y = GameObject.Find("Person/Camero").transform.localEulerAngles.y;
//Assign back to transform.eulerAngles
transform.localEulerAngles = tempAngle;
我想根据"Person/Camero"的Y轴旋转我的游戏对象"Person"的Y轴。我以为这行得通,但行不通,为什么行不通?我该如何解决? 此外,此脚本位于 "Person".
transform.rotation.y = GameObject.Find("Person/Camero").transform.rotation.y;
您永远不应该尝试用手旋转某些东西。而是找到增量并使用旋转功能。
试试这个:
var toRotate = GameObject.Find("Person/Camero").transform.rotation.ToAngleAxis() - transform.rotation.ToAngleAxis();
toRotate.x = 0;
toRotate.z = 0;
transform.Rotate(toRotate);
如果他看向相机而不是远离相机,请添加此行;
toRotate.y += 180;
祝你好运:)
您的代码有两个问题:
1。您是直接修改transform.rotation.y
。你不能这样做并且会得到如下编译时错误:
Cannot modify the return value of 'Transform.rotation' because it is not a variable
您必须获得 transform.rotation
即 Quaternion
,修改 y
然后将修改后的 Quaternion
分配回 transform.rotation
。
像这样的东西应该编译
//Get rotation
Quaternion tempRot = transform.rotation;
//Modify the Y
tempRot.y = GameObject.Find("Person/Camero").transform.rotation.y;
//Assign back to transform.rotation
transform.rotation = tempRot;
但 不会 运行 正确。原因见下文#2。
2。 transform.rotation.y
字段以 Quaternion
形式返回,因此 GameObject.Find("Person/Camero").transform.rotation.y
。仅修改一个轴将 而不是 给您实际期望的结果,因为它是 Quaternion
。您必须改为使用 angles 来执行此操作。
这是使用 transform.localEulerAngles
或 transform.eulerAngles
属性而不是 transform.rotation
完成的。如果对象有父对象,则使用 transform.localEulerAngles
。
这是应该按预期编译和工作的内容:
//Get rotation in Angle deg
Vector3 tempAngle = transform.localEulerAngles;
//Modify the Y axis
tempAngle.y = GameObject.Find("Person/Camero").transform.localEulerAngles.y;
//Assign back to transform.eulerAngles
transform.localEulerAngles = tempAngle;