unity,欧拉角

介绍

在Unity中,欧拉角(Euler Angles)用于描述物体的旋转状态,它由三个角度组成,通常是俯仰角(Pitch)、偏航角(Yaw)和翻滚角(Roll)。在Transform组件中,可以通过eulerAngles属性获取或设置物体的欧拉角。例如,当物体绕X轴旋转时,它的欧拉角表示为(X,0,0),当物体绕Y轴旋转时,它的欧拉角表示为(0,Y,0),当物体绕Z轴旋转时,它的欧拉角表示为(0,0,Z)。欧拉角在游戏开发中非常常用,可以用于控制物体的旋转状态,实现各种动态效果。但需要注意的是,欧拉角存在万向锁问题,需要注意避免出现异常情况。

万向锁:万向锁(Gimbal Lock)是欧拉角旋转中的一种异常情况,当物体的俯仰角接近90度或-90度时,会导致旋转出现异常。具体来说,当物体的俯仰角接近90度时,物体绕Y轴旋转和绕Z轴旋转的角度将会重叠,导致物体无法自由旋转,而是出现了旋转的“卡顿”现象。


方法

在Unity中,可以通过Transform组件的eulerAngles属性获取或设置物体的欧拉角。例如,可以使用以下代码获取物体的欧拉角:

Vector3 euler = transform.eulerAngles;
也可以使用以下代码设置物体的欧拉角:

transform.eulerAngles = new Vector3(x, y, z);
其中,x、y、z分别代表物体绕X轴、Y轴和Z轴的旋转角度。

除了使用eulerAngles属性,还可以使用Quaternion.Euler()方法将欧拉角转换为四元数。例如,可以使用以下代码将欧拉角转换为四元数:

Quaternion rotation = Quaternion.Euler(x, y, z);
其中,x、y、z分别代表物体绕X轴、Y轴和Z轴的旋转角度。


举例子

鼠标控制旋转视角

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
// 鼠标灵敏度
public float mouseSensitivity = 100f;
// 角度限制
public float clampAngle = 80f;

// 鼠标移动距离
private float mouseX;
private float mouseY;

// 角度
private float rotX = 0f;
private float rotY = 0f;

void Start()
{
    // 获取初始角度
    Vector3 rot = transform.localRotation.eulerAngles;
    rotX = rot.x;
    rotY = rot.y;
}

void Update()
{
    // 获取鼠标移动距离
    mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
    mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

    // 旋转视角
    rotX -= mouseY;
    rotY += mouseX;

    // 角度限制
    rotX = Mathf.Clamp(rotX, -clampAngle, clampAngle);

    // 更新旋转
    Quaternion localRotation = Quaternion.Euler(rotX, rotY, 0f);
    transform.rotation = localRotation;
}

}


猜你喜欢

转载自blog.csdn.net/qq_20179331/article/details/130012573