Unity中如何获取GameObject实际旋转值并正确赋值给其他对象?
解决Unity旋转赋值问题
你的问题出在直接操作四元数的分量上——transform.rotation返回的是四元数(Quaternion),它的x/y/z/w分量是用于计算3D旋转的内部数值,和你在Inspector面板里看到的直观旋转角度(欧拉角)完全不是一回事。另外代码里还犯了个小错误:把transform.position.y(位置Y值)当成了旋转的Y轴分量,这肯定会出问题。
正确的做法是用eulerAngles属性获取/设置直观的欧拉角旋转值,步骤如下:
- 先获取目标对象的X轴欧拉角旋转值(就是你在Inspector里看到的X旋转数值):
float targetXRot = target.transform.eulerAngles.x;
- 保留当前对象自身的X、Y轴旋转,将Z轴替换为目标的X轴旋转值:
Vector3 currentRot = transform.eulerAngles; transform.eulerAngles = new Vector3(currentRot.x, currentRot.y, targetXRot);
或者直接合并成一行代码:
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, target.transform.eulerAngles.x);
补充说明
如果你的对象是在父物体下,需要操作局部旋转而非世界旋转,就把eulerAngles换成localEulerAngles即可,比如:
float targetXRot = target.transform.localEulerAngles.x; transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, targetXRot);
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

