Unity FPS-controller

FPS (of First-Person Shooter) is een spel waarin de hoofdpersoon wordt bestuurd vanuit een first-person perspectief.

De gebruikelijke bedieningselementen zijn W, A, S en D om te lopen, muis kijken om rond te kijken, spatiebalk om te springen en linkershift om te sprinten, waardoor de speler vrijelijk door het level kan bewegen.

In dit bericht laat ik zien hoe je in Unity een FPS-controller kunt maken die de camerarotatie en spelerbewegingen verwerkt.

Stappen

Volg de onderstaande stappen om een ​​FPS-controller te maken:

  • Maak een nieuw spelobject (GameObject -> Leeg maken) en geef het een naam "FPSPlayer"
  • Maak een nieuwe capsule (GameObject -> 3D-object -> Capsule) en verplaats deze binnen het "FPSPlayer"-object
  • Verwijder de Capsule Collider-component uit de Capsule en verander de positie in (0, 1, 0)
  • Verplaats de hoofdcamera binnen het "FPSPlayer"-object en verander de positie ervan in (0, 1.64, 0)

  • Maak een nieuw script, noem het "SC_FPSController" en plak de onderstaande code erin:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]

public class SC_FPSController : MonoBehaviour
{
    public float walkingSpeed = 7.5f;
    public float runningSpeed = 11.5f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    public Camera playerCamera;
    public float lookSpeed = 2.0f;
    public float lookXLimit = 45.0f;

    CharacterController characterController;
    Vector3 moveDirection = Vector3.zero;
    float rotationX = 0;

    [HideInInspector]
    public bool canMove = true;

    void Start()
    {
        characterController = GetComponent<CharacterController>();

        // Lock cursor
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void Update()
    {
        // We are grounded, so recalculate move direction based on axes
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        Vector3 right = transform.TransformDirection(Vector3.right);
        // Press Left Shift to run
        bool isRunning = Input.GetKey(KeyCode.LeftShift);
        float curSpeedX = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Vertical") : 0;
        float curSpeedY = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Horizontal") : 0;
        float movementDirectionY = moveDirection.y;
        moveDirection = (forward * curSpeedX) + (right * curSpeedY);

        if (Input.GetButton("Jump") && canMove && characterController.isGrounded)
        {
            moveDirection.y = jumpSpeed;
        }
        else
        {
            moveDirection.y = movementDirectionY;
        }

        // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below
        // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied
        // as an acceleration (ms^-2)
        if (!characterController.isGrounded)
        {
            moveDirection.y -= gravity * Time.deltaTime;
        }

        // Move the controller
        characterController.Move(moveDirection * Time.deltaTime);

        // Player and Camera rotation
        if (canMove)
        {
            rotationX += -Input.GetAxis("Mouse Y") * lookSpeed;
            rotationX = Mathf.Clamp(rotationX, -lookXLimit, lookXLimit);
            playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
            transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * lookSpeed, 0);
        }
    }
}
  • Voeg het SC_FPSController-script toe aan het "FPSPlayer"-object (u zult merken dat het ook een andere component heeft toegevoegd met de naam Character Controller, verander de middelste waarde in (0, 1, 0))
  • Wijs de hoofdcamera toe aan de spelercameravariabele in SC_FPSController

Unity FPS-controller

De FPS-controller is nu klaar!

Voorgestelde artikelen
Hurken toevoegen aan FPS-speler in Unity
Speler 3D- en 2D-muursprong-tutorial voor Unity
Unity Hoe u mobiele aanraakbedieningen maakt
Karaktercontroller Hoe u de mogelijkheid kunt toevoegen om starre lichamen in eenheid te duwen
Spelersbeweging in eenheid creëren
Ondersteuning voor bewegende platforms toevoegen aan de karaktercontroller in Unity
Rigidbody-gebaseerde Planetary Player Controller for Unity