引言
在游戏开发中,第一人称视角控制是许多游戏的核心部分,尤其是在第一人称射击(FPS)游戏中。本文将详细介绍如何在Unity中实现一个简单的第一人称视角控制,包括角色的前后移动和视角的上下旋转。我们将通过代码示例和详细的注释来帮助初学者理解这一过程。
场景设置:
在场景中,第一人称视角需要 我们把摄像机直接放到游戏主角的子物体下面,并调整好自己想要的角度即可!接下来的代码只需要控制游戏主角这个游戏物体即可!
代码结构
首先,我们来看一下代码的整体结构。代码的主要功能是控制一个角色(GameObject)的前后移动和视角的旋转。代码使用了Unity的输入系统来检测用户的输入,并通过transform
组件来控制角色的移动和旋转。
程序原理概述
这个程序实现了一个第一人称视角的角色控制脚本。主要功能包括:
-
前后移动:通过按下 W 和 S 键控制角色前后移动。
-
视角旋转:通过鼠标左右滑动和上下滑动控制角色视角的左右旋转和上下旋转。
-
鼠标锁定:在游戏开始时,隐藏并锁定鼠标光标在屏幕中央,防止鼠标移出游戏窗口。
代码注释
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 第一人称视角控制
/// </summary>
public class ShMoveFirstView : MonoBehaviour
{
// 主角色对象
GameObject MainRole;
public GameObject Head;
// 用于存储Y轴和X轴的旋转角度
float RotaY;
float RotaX;
void Start()
{
// 通过标签找到主角色对象
MainRole = GameObject.FindGameObjectWithTag("MyRole");
// 隐藏并锁定鼠标光标在屏幕中央,防止鼠标移出游戏窗口
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
// 打印鼠标当前位置,用于调试
Debug.Log(Input.mousePosition);
// 实现前后移动
float qianhou = Input.GetAxis("qianhouzou"); // 系统只负责检测用户输入了W S ,返回给你-1 / +1
// 现在用户按下了W S
MainRole.transform.Translate(new Vector3(0, 0, 1 * qianhou)); // 根据输入值移动角色
// 实现左右旋转
float MouseHorizon = Input.GetAxis("Mouse X"); // 调用系统指定的输入检测模块,Mouse X 只负责检测 用户左右滑动鼠标这个事,用 -1 和 +1 表示往左和往右滑动
RotaY = RotaY + MouseHorizon; // 更新Y轴旋转角度
//下面这行代码是控制主角左右移动,我们把上下移动 交给主角的子物体移动而不是直接移动主角,避免主角前后仰翻导致主角碰撞器与地面不平整带来的抖动
MainRole.transform.rotation = Quaternion.Euler(0, RotaY, 0); // 为了避免万向节锁死不用Rotate()函数,直接设置旋转角度
// 实现上下旋转视角
float MouseVertical = Input.GetAxis("Mouse Y"); // 调用系统指定的输入检测模块,Mouse Y 只负责检测 用户上下滑动鼠标这个事,用 -1 和 +1 表示往上和往下滑动
RotaX = RotaX + MouseVertical; // 更新X轴旋转角度
RotaX = Mathf.Clamp(RotaX, -30, 30); // 限制X轴旋转角度在-30到30度之间
Head.transform.rotation = Quaternion.Euler(RotaX, RotaY, 0); // 为了避免万向节锁死不用Rotate()函数,直接设置旋转角度
// 限制一下上下数值,防止过度旋转
}
}
关键点解释
-
Input.GetAxis("Vertical"): 获取垂直轴输入(W 和 S 键),用于控制角色的前后移动。
-
Input.GetAxis("Mouse X") 和 Input.GetAxis("Mouse Y"): 获取鼠标在X轴和Y轴上的移动量,用于控制角色的视角旋转。
-
Mathf.Clamp: 用于限制角色的上下旋转角度在-30到60度之间,防止过度旋转。
-
Quaternion.Euler: 将欧拉角转换为四元数,并设置角色的旋转。
总结
这个程序通过键盘和鼠标输入实现了第一人称视角的角色控制。通过 W 和 S 键控制角色的前后移动,通过鼠标左右滑动和上下滑动控制角色的视角旋转。代码简洁易懂,适用于第一人称视角的游戏项目。