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];
//}
}