Unity FPS-controller

FPS (eller First-Person Shooter) er et spil, hvor hovedpersonen styres fra et førstepersonsperspektiv.

De sædvanlige kontroller er W, A, S og D for at gå, Mouse Look for at se sig omkring, Space for at hoppe og Venstre Shift for at spurte, hvilket giver spilleren mulighed for at bevæge sig frit rundt på niveauet.

I dette indlæg vil jeg vise, hvordan man laver en FPS-controller i Unity, der vil håndtere kamerarotation og afspillerbevægelse.

Trin

Følg nedenstående trin for at lave en FPS-controller:

  • Opret et nyt spilobjekt (GameObject -> Create Empty) og navngiv det "FPSPlayer"
  • Opret en ny kapsel (GameObject -> 3D Object -> Capsule) og flyt den ind i "FPSPlayer" objektet
  • Fjern Capsule Collider-komponenten fra Capsule og skift dens position til (0, 1, 0)
  • Flyt hovedkameraet inde i "FPSPlayer"-objektet og skift dets position til (0, 1.64, 0)

  • Opret et nyt script, navngiv det "SC_FPSController" og indsæt koden nedenfor i det:
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);
        }
    }
}
  • Vedhæft SC_FPSController-scriptet til "FPSPlayer"-objektet (Du vil bemærke, at det også tilføjede en anden komponent kaldet Character Controller, ændre dens midterværdi til (0, 1, 0))
  • Tildel hovedkameraet til Player Camera-variablen i SC_FPSController

Unity FPS-controller

FPS-controlleren er nu klar!

Foreslåede artikler
Tilføjelse af Crouching til FPS Player i Unity
Player 3D og 2D Wall Jump Tutorial for Unity
Character Controller Sådan tilføjes evnen til at skubbe rigidbodies i enhed
Oprettelse af spillerbevægelse i Unity
Unity Sådan laver du mobile berøringskontroller
Sådan tilføjes Moving Platform Support til Character Controller i Unity
Rigidbody-baseret Planetary Player Controller til Unity