代码段-平滑的旋转一个物体

该博客介绍了一个Unity脚本,用于平滑地旋转场景中的物体。通过调整鼠标输入,可以控制物体沿X和Y轴的平滑转动,并且限制了Y轴的转动范围。平滑效果通过速度变量和Lerp函数实现,确保旋转过程流畅。
摘要由CSDN通过智能技术生成
using UnityEngine;
using System.Collections;

public class RotateObj : MonoBehaviour
{
    public float xSpeed = 120.0f;
    public float ySpeed = 120.0f;

    public float yMinLimit = -20f;
    public float yMaxLimit = 80f;

    public float smoothTime = 2f;

    float rotationYAxis = 0.0f;
    float rotationXAxis = 0.0f;

    float velocityX = 0.0f;
    float velocityY = 0.0f;

    // Use this for initialization
    void Start()
    {
        Vector3 angles = transform.eulerAngles;
        rotationYAxis = angles.y;
        rotationXAxis = angles.x;
    }

    void LateUpdate()
    {
        if (Input.GetMouseButtonDown(0))
        {
            velocityX = 0;
            velocityY = 0;
        }
        if (Input.GetMouseButton(0))
        {
            velocityX = -xSpeed * Input.GetAxis("Mouse X");
            velocityY = ySpeed * Input.GetAxis("Mouse Y");
            rotationYAxis += velocityX;
            rotationXAxis -= velocityY;
            rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);
            transform.rotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);
            return;
        }
        if (Input.GetMouseButtonUp(0))
        {
            velocityX -= xSpeed * Input.GetAxis("Mouse X") * 0.02f;
            velocityY += ySpeed * Input.GetAxis("Mouse Y") * 0.02f;
        }
        rotationYAxis += velocityX;
        rotationXAxis -= velocityY;

        rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);

        Quaternion toRotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);
        Quaternion rotation = toRotation;

        transform.rotation = rotation;

        velocityX = Mathf.Lerp(velocityX, 0, Time.deltaTime * smoothTime);
        velocityY = Mathf.Lerp(velocityY, 0, Time.deltaTime * smoothTime);
    }

    public static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360F)
            angle += 360F;
        if (angle > 360F)
            angle -= 360F;
        return Mathf.Clamp(angle, min, max);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值