Unity C#实现3D预制体绕自身轴按A键旋转90度问题求助
解决Unity预制体绕自身中心旋转的问题
你的核心问题是错误地单独旋转每个子物体,导致每个子物体绕自身轴/世界轴旋转,而非让整个预制体(父物体)绕自身中心旋转。Unity编辑器的Rotate Tool本质是直接操作父物体的Transform组件,子物体会自动继承父物体的旋转,从而实现绕父物体中心旋转的效果。
修正后的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotatePrefab : MonoBehaviour { // 预制体的父物体 public GameObject parentObject; void Update() { // 按下A键时触发旋转 if (Input.GetKeyDown(KeyCode.A)) { if (parentObject != null) { // 直接旋转父物体的Y轴,顺时针向右转90度 // 注:Unity右手坐标系中,Y轴正方向为逆时针旋转,顺时针需用负角度 parentObject.transform.Rotate(0f, -90f, 0f, Space.Self); // 如果你的"向右旋转"需要正角度,可改为0f, 90f, 0f,根据实际视角调整 } else { Debug.LogError("未指定父物体!"); } } } }
关键说明
- 直接旋转父物体:父物体的Transform旋转会带动所有子物体同步旋转,子物体会以父物体的轴心为旋转中心,完全复刻Rotate Tool的效果。
- Space.Self vs Space.World:使用
Space.Self表示绕父物体自身的Y轴旋转,而非世界Y轴,更符合"绕自身轴旋转"的需求;若需固定绕世界Y轴旋转,可保留Space.World。 - 角度方向:Unity采用右手坐标系,Y轴正方向旋转是逆时针(从Y轴正方向向下看),若需要顺时针向右旋转,使用
-90f即可,可根据实际场景视角调整正负值。
内容的提问来源于stack exchange,提问作者Cirill Parnó
相关产品推荐
相关产品推荐

