Unity 相机旋转及角度限制

前言

由于欧拉角具有直观的可读性,做相机旋转时选择修改eulerAngles 来实现旋转,但实际效果与预期稍有不同,这是因为欧拉角受到万向锁(Gimbal Lock)的影响,在赋值时需要对输入的角度进行调整。

if (value < 180)
{
    value = Mathf.Clamp(value, -180, -min);
}
else
{
    value = Mathf.Clamp(value, 360 - max, 360);
}

实现

private void Rotate()
{
    xInput = Input.GetAxis("Mouse X");
    yInput = Input.GetAxis("Mouse Y");

    float xAngle = transCam.eulerAngles.x - yInput * speedRotate;
    float yAngle = transCam.eulerAngles.y + xInput * speedRotate;
    xAngle = Clamp(xAngle, minAngleX, maxAngleX);
    yAngle = Clamp(yAngle, minAngleY, maxAngleY);
    transCam.eulerAngles = new Vector3(xAngle, yAngle, 0);
        
    float Clamp(float value, float min, float max)
    {
        if (min > max)
        {
            float temp = min;
            min = max;
            max = temp;
        }

        if (value < 180)
        {
            value = Mathf.Clamp(value, -180, -min);
        }
        else
        {
            value = Mathf.Clamp(value, 360 - max, 360);
        }
        return value;
    }
}
Unity中,要实现相机跟随模型并设定垂直旋转角度限制,你可以创建一个空物体作为相机的锚点,然后编写脚本来控制其运动。以下是一个基本步骤: 1. **创建场景**:首先,在Unity编辑器中创建一个新的场景或加载现有的项目。 2. **设置锚点**:将相机组件添加到一个空游戏对象上,命名为"CameraFollow"。这个空对象将成为相机移动的基础。 3. **设置相机属性**:将"CameraFollow"的`RotationMode`属性设置为`LocalSpace`,确保相机只在自身坐标系内旋转。 4. **编写脚本**:创建一个新的C#脚本,例如叫`CameraController`,粘贴以下代码: ```csharp using UnityEngine; public class CameraController : MonoBehaviour { public Transform target; // 目标模型 public float maxVerticalAngle = 60f; // 最大垂直旋转角度 private Quaternion currentRotation; void LateUpdate() { // 获取当前相机的朝向 Quaternion desiredRotation = Quaternion.LookRotation(target.position - transform.position); // 确保垂直旋转不超过最大值 desiredRotation = Quaternion.Euler(0, Mathf.Clamp(desiredRotation.eulerAngles.y, -maxVerticalAngle, maxVerticalAngle), 0); // 保持相机沿目标的方向旋转,同时限制垂直角度 transform.rotation = Quaternion.Lerp(transform.rotation, desiredRotation, Time.deltaTime * 5f); // 使用Lerp平滑过渡 } } ``` 5. **应用脚本**:将这个脚本附加到"CameraFollow"游戏对象上。 现在,当你在游戏中移动目标模型时,相机会自动跟随并在垂直方向上按照你设定的最大角度进行旋转。更新部分的`Time.deltaTime * 5f`用于控制旋转的速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值