如何根据相机的Y旋转此对象的Y?

时间:2018-01-12 23:37:07

标签: c# unity3d unity5

我想根据“人物/喀麦隆”的Y轮换旋转我的游戏对象“人物”的Y.我认为这会有效,但事实并非如此,为什么这不起作用?我该怎么办呢? 此外,此脚本位于“人员”中。

transform.rotation.y = GameObject.Find("Person/Camero").transform.rotation.y;

2 个答案:

答案 0 :(得分:1)

您的代码存在两个问题:

1 。您正在直接修改transform.rotation.y。您无法执行此操作并将收到如下编译时错误:

  

无法修改' Transform.rotation'的返回值。因为它是   不是变量

您必须获取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。您必须使用角度来执行此操作。

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

答案 1 :(得分:0)

你永远不应该用手旋转东西。而是查找delta并使用Rotate函数。

试试这个:

var toRotate = GameObject.Find("Person/Camero").transform.rotation.ToAngleAxis() - transform.rotation.ToAngleAxis();
toRotate.x = 0;
toRotate.z = 0;
transform.Rotate(toRotate);

如果他朝向而不是远离相机,请添加此行;

toRotate.y += 180;

祝你好运:)