Pengontrol FPS Persatuan

FPS (atau First-Person Shooter) adalah game yang karakter utamanya dikontrol dari sudut pandang orang pertama.

Kontrol yang biasa digunakan adalah W, A, S, dan D untuk berjalan, Mouse Look untuk melihat sekeliling, Spasi untuk melompat, dan Shift Kiri untuk berlari, memungkinkan pemain untuk bergerak dengan bebas di sekitar level.

Pada postingan kali ini, saya akan menunjukkan cara membuat pengontrol FPS di Unity yang akan menangani rotasi kamera dan pergerakan pemain.

Langkah

Untuk membuat pengontrol FPS, ikuti langkah-langkah di bawah ini:

  • Buat Objek Game baru (GameObject -> Buat Kosong) dan beri nama "FPSPlayer"
  • Buat Kapsul baru (GameObject -> Objek 3D -> Kapsul) dan pindahkan ke dalam Objek "FPSPlayer"
  • Lepaskan komponen Capsule Collider dari Capsule dan ubah posisinya menjadi (0, 1, 0)
  • Pindahkan Kamera Utama ke dalam Objek "FPSPlayer" dan ubah posisinya menjadi (0, 1.64, 0)

  • Buat skrip baru, beri nama "SC_FPSController" dan tempel kode di bawah ini di dalamnya:
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);
        }
    }
}
  • Lampirkan skrip SC_FPSController ke Objek "FPSPlayer" (Anda akan melihat bahwa ia juga menambahkan komponen lain yang disebut Pengontrol Karakter, ubah nilai tengahnya menjadi (0, 1, 0))
  • Tetapkan Kamera Utama ke variabel Kamera Pemutar di SC_FPSController

Pengontrol FPS Persatuan

Pengontrol FPS sekarang siap!

Sumber
📁FPSController.unitypackage53.91 KB
Artikel yang Disarankan
Menambahkan Crouching ke FPS Player di Unity
Tutorial Lompat Dinding 3D dan 2D Pemain untuk Unity
Unity Cara Membuat Kontrol Sentuh Seluler
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Menciptakan Pergerakan Pemain dalam Kesatuan
Cara Menambahkan Dukungan Platform Bergerak ke Pengontrol Karakter di Unity
Pengontrol Pemain Planetary berbasis benda kaku untuk Unity