Unity(4)-Input

B站Unity学习笔记
链接:https://www.bilibili.com/video/BV12s411g7gU
Input
-包装了输入功能的类,可以读取输入管理器中设置的按键,以及访问移动设备的多点触控或加速感应数据。
-建议在Update中监测用户输入。

获取鼠标输入
  • 当指定的鼠标按钮被按下时返回true, bool result = Input.GetMouseButton(0);
  • 在用户按下指定鼠标按键的第一帧返回true, bool result = Input.GetMouseButtonDown(0);
  • 在用户释放指定鼠标按键的第一帧返回true, bool result = Input.GetMouseButtonUp(0);
  • 按钮值设定:0对应左键,1对应右键,2对应中键
获取键盘输入
  • 当通过名称指定的按键被用户按住时返回true, bool result = Input.GetKey(KeyCode.A);
  • 在用户按下指定名称按键的那一帧返回true, bool result = Input.GetKeyDown(KeyCode.A);
  • 在用户释放指定名称按键的那一帧返回true, bool result = Input.GetKeyUp(KeyCode.A);
练习

瞄准镜。通过鼠标右键,实现摄像机镜头缩放。

public class CareamZoom : MonoBehaviour
{
    public bool isDown;
    public bool isKey;

    void Update1()
    {
        isDown = Input.GetMouseButton(0);
        isKey = Input.GetKey(KeyCode.LeftAlt);
        //检测按下C键同时按下D键
        if (Input.GetKey(KeyCode.C) && Input.GetKeyDown(KeyCode.D))
        {
            print("CD");
        }
    }

    private Camera camera;

    private void Start()
    {
        camera = GetComponent<Camera>();
    }

    private bool isFar = true;
    private void Update2()
    {
        if (Input.GetMouseButtonDown(1))
        {
            isFar = !isFar;
            if (isFar)
            {
                camera.fieldOfView = 60;
            }
            else
            {
                camera.fieldOfView = 20;
            }
        }
    }

    private void Update3()
    {
        if (Input.GetMouseButtonDown(1))
        {
            isFar = !isFar;
        }
        if (isFar)
        {
            if (camera.fieldOfView < 60)
                camera.fieldOfView += 2;
        }
        else
        {
            if (camera.fieldOfView > 20)
                camera.fieldOfView -= 2;
        }
    }

    private void Update4()
    {
        if (Input.GetMouseButtonDown(1))
        {
            isFar = !isFar;
        }
        if (isFar)
        {   //无限接近,但不等于终点
            camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 60, 0.1f);
            if (Mathf.Abs(camera.fieldOfView - 60) < 0.1f)
            {
                camera.fieldOfView = 60;
            }
        }
        else
        {
            camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 20, 0.1f);
            if (Mathf.Abs(camera.fieldOfView - 20) < 0.1f)
            {
                camera.fieldOfView = 20;
            }
        }
    }

    public float[] zoomLevels;
    private int currentLevel;
    //private void Update()
    //{
    //    if (Input.GetMouseButtonDown(1))
    //    {
    //        //修改缩放等级
    //        //currentLevel++;
    //        // currentLevel = currentLevel < zoomLevels.Length - 1 ? currentLevel + 1 : 0;
    //        currentLevel = (currentLevel + 1) % zoomLevels.Length;
    //    }
    //    camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomLevels[currentLevel], 0.1f);
    //    if (Mathf.Abs(camera.fieldOfView - zoomLevels[currentLevel]) < 0.1f)
    //        camera.fieldOfView = zoomLevels[currentLevel];
    //}
}


上一篇:camera1知识点


下一篇:一篇文章带你了解Android 最新Camera框架