我想根据“人物/喀麦隆”的Y轮换旋转我的游戏对象“人物”的Y.我认为这会有效,但事实并非如此,为什么这不起作用?我该怎么办呢? 此外,此脚本位于“人员”中。
transform.rotation.y = GameObject.Find("Person/Camero").transform.rotation.y;
答案 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.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;
答案 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;
祝你好运:)