Unity 鼠标键盘预览场景脚本

2022-07-17  本文已影响0人  114105lijia

直接上代码:

/**
 * ==========================================
 * FileName: KeyboardMouseHandle.cs
 * Author:   lijia
 * CreatTime:7/18/2022
 * ==========================================
 */

using UnityEngine;

public class KeyboardMouseHandle : MonoBehaviour
{
    [Header("移动速度")]
    public float moveSpeed = 4.0f;

    [Header("水平旋转角度")]
    public float xSpeed = 250.0f;
    [Header("垂直旋转角度")]
    public float ySpeed = 120.0f;

    [Header("向上旋转最大角度")]
    public int yMinLimit = 30;
    [Header("向下旋转最大角度")]
    public int yMaxLimit = 30;

    //旋转角度
    private float x = 0.0f;
    private float y = 0.0f;

    private float y_offset;

    void Start()
    {
        y_offset = transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {

        //WSAD 移动
        Move();

        //鼠标右键旋转
        Rotation();
    }

    void Move()
    {
        float horizontalinput = Input.GetAxis("Horizontal");
        //AD方向控制
        float Verticalinput = Input.GetAxis("Vertical");
        //WS方向控制

        transform.Translate(Vector3.right * horizontalinput * Time.deltaTime * moveSpeed);
        //控制该物体向侧方移动
        transform.Translate(Vector3.forward * Verticalinput * Time.deltaTime * moveSpeed);

        //确保Y轴不变(摄像机可能有旋转一定角度)
        Vector3 position = transform.localPosition;
        position.y = y_offset;
        transform.localPosition = position;
    }

    void Rotation()
    {
        if (Input.GetMouseButton(1))
        {
            //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离
            x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
            y = ClampAngle(y, -yMinLimit, yMaxLimit);

            //欧拉角转化为四元数
            Quaternion rotation = Quaternion.Euler(y, x, 0);
            transform.rotation = rotation;
        }
    }

    //角度范围值限定
    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
            angle += 360;
        if (angle > 360)
            angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }
}

上一篇 下一篇

猜你喜欢

热点阅读