< 返回教程列表
3.3 输入 Input
知识介绍
using UnityEngine;
public class InputDemo : MonoBehaviour
{
private void Update()
{
// ============== 键盘 ==============
// 按下瞬间
if (Input.GetKeyDown(KeyCode.Space))
Debug.Log("空格被按下");
// 持续按住
if (Input.GetKey(KeyCode.A))
Debug.Log("A 键按住中");
// 抬起瞬间
if (Input.GetKeyUp(KeyCode.Space))
Debug.Log("空格被抬起");
// ============== 鼠标 ==============
// 0=左键, 1=右键, 2=中键
if (Input.GetMouseButtonDown(0))
{
Vector3 mPos = Input.mousePosition; // 屏幕像素坐标
Debug.Log($"鼠标点击屏幕位置:{mPos}");
}
// ============== 轴 Input(WSAD / 方向键 / 手柄摇杆)==============
float h = Input.GetAxis("Horizontal"); // A/-1 ~ D/+1(平滑)
float v = Input.GetAxis("Vertical"); // S/-1 ~ W/+1
// 无平滑版本(用在跳跃等需要立即响应的情况)
float hRaw = Input.GetAxisRaw("Horizontal");
// ============== 跳跃按钮 ==============
if (Input.GetButtonDown("Jump")) // 默认对应空格
Debug.Log("跳!");
}
}
最常用:WSAD 控制角色移动
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float speed = 5f;
private void Update()
{
float h = Input.GetAxis("Horizontal"); // A/D
float v = Input.GetAxis("Vertical"); // W/S
// 方向向量
Vector3 dir = new Vector3(h, 0, v);
// 归一化(防止斜着走更快)
if (dir.magnitude > 1) dir.Normalize();
// 世界坐标移动
// transform.position += dir * speed * Time.deltaTime;
// 本地坐标移动(根据自身朝向)
transform.Translate(dir * speed * Time.deltaTime, Space.Self);
}
}
例题
例题: 第一人称视角鼠标旋转(X 轴控制左右,Y 轴控制上下)。
using UnityEngine;
public class MouseLook : MonoBehaviour
{
public float mouseSens = 100f;
public Transform playerBody; // 玩家身体(用于左右旋转)
private float xRotation = 0f;
private void Start()
{
Cursor.lockState = CursorLockMode.Locked; // 锁定鼠标到屏幕中央
}
private void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSens * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSens * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f); // 限制上下不超过90°
transform.localRotation = Quaternion.Euler(xRotation, 0, 0); // 相机上下看
playerBody.Rotate(Vector3.up * mouseX); // 身体左右转
}
}
练习题
实现一个简单的 WASD 移动脚本:挂到 Cube 上,WSAD 控制上下左右(XZ 平面)移动,速度 5。
扩展第1题:按住 Left Shift 时速度变 10(加速跑),松开恢复。
按 J 键让 Cube 向上跳(给位置 Y + 5 的瞬间位置变化,不用物理),注意冷却 1 秒不能连续跳。
实现鼠标右键拖拽旋转物体:按住右键拖动时,根据鼠标 X 轴偏移让物体绕 Y 轴旋转。
实现"按 1 切换第一人称 / 第三人称":场景中有两个 Camera,按 1 启用主相机、禁用另一个,按 2 反过来。