安卓第一人称3D游戏中点击Quad物体无法可视化旋转问题求助
解决建议与替代代码
原代码的潜在问题
- 冗余获取
Transform:hit.transform本身就是Transform组件,无需重复调用GetComponent<Transform>() - 不规范的四元数初始化:直接给未初始化的
Quaternion实例赋值eulerAngles,易引发隐性问题 - 强制覆盖Y轴旋转:固定设置Y轴为90,会丢失原物体的Y轴旋转状态
修正后的代码
if (array[i].name == "Quad") { Debug.Log("Quad object hitted"); Transform quadTransform = hit.transform; Vector3 currentEuler = quadTransform.rotation.eulerAngles; Debug.Log(currentEuler); // 仅在Z轴累加45度,保留原X、Y轴旋转 Vector3 newEuler = new Vector3(currentEuler.x, currentEuler.y, currentEuler.z + 45f); quadTransform.rotation = Quaternion.Euler(newEuler); }
额外排查方向
- 父物体影响:如果Quad是某个物体的子对象,父物体的旋转会导致视觉旋转和世界旋转不一致,改用本地旋转试试:
Vector3 currentLocalEuler = quadTransform.localRotation.eulerAngles; Vector3 newLocalEuler = new Vector3(currentLocalEuler.x, currentLocalEuler.y, currentLocalEuler.z + 45f); quadTransform.localRotation = Quaternion.Euler(newLocalEuler); - 其他脚本/组件干扰:检查Quad是否挂载了动画组件(Animator)、刚体(Rigidbody)等。动画可能锁定旋转属性,刚体若开启旋转约束也会阻止旋转。
- 旋转轴验证:Quad默认朝向可能和你预期的不同,可临时修改X/Y轴的旋转值,确认视觉上是否有变化,排查是否选对了旋转轴。
- 对象正确性:确认日志输出的
Quad object hitted对应的是你要操作的目标Quad,避免误操作了同名物体。
内容的提问来源于stack exchange,提问作者Shai Segal
相关产品推荐
相关产品推荐

