Unity中如何绕轴旋转Vector3?用内置方法还是几何三角解法?
Unity中绕相对Y轴旋转Vector3的实现方法
完全可以用Unity内置方法实现,这也是最推荐的方式,不需要自己手动写坐标几何或三角学代码。以下是具体实现方式:
内置方法实现(首选)
Unity的四元数系统已经封装了所有旋转逻辑,你只需要创建对应轴的旋转四元数,再与目标向量相乘即可:
绕世界Y轴(Vector3.up)旋转
Vector3 originalVec = new Vector3(1, 0, 0); float rotateAngle = 90f; // 旋转角度(单位:度) // 方式1:用AngleAxis创建旋转四元数 Quaternion yRotation = Quaternion.AngleAxis(rotateAngle, Vector3.up); Vector3 rotatedVec = yRotation * originalVec; // 方式2:用Euler角创建旋转四元数(Y轴对应第二个参数) Quaternion yRotationEuler = Quaternion.Euler(0, rotateAngle, 0); Vector3 rotatedVecEuler = yRotationEuler * originalVec;
绕物体自身相对Y轴旋转
如果要绕某个GameObject自身的Y轴(而非世界Y轴)旋转,只需将Vector3.up替换为物体的transform.up:
GameObject targetObj = /* 你的目标物体 */; Quaternion localYRotation = Quaternion.AngleAxis(rotateAngle, targetObj.transform.up); Vector3 rotatedLocalVec = localYRotation * originalVec;
手动实现(不推荐)
如果你一定要用坐标几何和三角学手动计算,绕世界Y轴旋转时可以这样做(Y分量保持不变,仅旋转XZ平面的分量):
float rad = rotateAngle * Mathf.Deg2Rad; float cos = Mathf.Cos(rad); float sin = Mathf.Sin(rad); float newX = originalVec.x * cos - originalVec.z * sin; float newZ = originalVec.x * sin + originalVec.z * cos; Vector3 rotatedVecManual = new Vector3(newX, originalVec.y, newZ);
但这种方法仅适用于世界Y轴旋转,若要处理物体自身相对Y轴,还需额外做坐标系转换,步骤繁琐且容易出错,远不如内置四元数方法高效可靠。
内容的提问来源于stack exchange,提问作者user20640763
相关产品推荐
相关产品推荐

