如何根据相机的 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.rotationQuaternion,修改 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

2transform.rotation.y 字段以 Quaternion 形式返回,因此 GameObject.Find("Person/Camero").transform.rotation.y。仅修改一个轴将 而不是 给您实际期望的结果,因为它是 Quaternion。您必须改为使用 angles 来执行此操作。

这是使用 transform.localEulerAnglestransform.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;