【Unity第一人称视角控制脚本】不用再找了,收藏这篇这辈子就够了!

 

引言

在游戏开发中,第一人称视角控制是许多游戏的核心部分,尤其是在第一人称射击(FPS)游戏中。本文将详细介绍如何在Unity中实现一个简单的第一人称视角控制,包括角色的前后移动和视角的上下旋转。我们将通过代码示例和详细的注释来帮助初学者理解这一过程。

场景设置:

在场景中,第一人称视角需要 我们把摄像机直接放到游戏主角的子物体下面,并调整好自己想要的角度即可!接下来的代码只需要控制游戏主角这个游戏物体即可!

代码结构

首先,我们来看一下代码的整体结构。代码的主要功能是控制一个角色(GameObject)的前后移动和视角的旋转。代码使用了Unity的输入系统来检测用户的输入,并通过transform组件来控制角色的移动和旋转。

程序原理概述

这个程序实现了一个第一人称视角的角色控制脚本。主要功能包括:

  1. 前后移动:通过按下 W 和 S 键控制角色前后移动。

  2. 视角旋转:通过鼠标左右滑动和上下滑动控制角色视角的左右旋转和上下旋转。

  3. 鼠标锁定:在游戏开始时,隐藏并锁定鼠标光标在屏幕中央,防止鼠标移出游戏窗口。

代码注释

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()函数,直接设置旋转角度

        // 限制一下上下数值,防止过度旋转
    }
}

关键点解释

  1. Input.GetAxis("Vertical"): 获取垂直轴输入(W 和 S 键),用于控制角色的前后移动。

  2. Input.GetAxis("Mouse X") 和 Input.GetAxis("Mouse Y"): 获取鼠标在X轴和Y轴上的移动量,用于控制角色的视角旋转。

  3. Mathf.Clamp: 用于限制角色的上下旋转角度在-30到60度之间,防止过度旋转。

  4. Quaternion.Euler: 将欧拉角转换为四元数,并设置角色的旋转。

总结

这个程序通过键盘和鼠标输入实现了第一人称视角的角色控制。通过 W 和 S 键控制角色的前后移动,通过鼠标左右滑动和上下滑动控制角色的视角旋转。代码简洁易懂,适用于第一人称视角的游戏项目。