Menambahkan Efek Kepala Terombang-ambing ke Kamera di Unity

Efek Head bobbing banyak digunakan dalam game First-Person Shooter dan memainkan peran penting dalam meningkatkan pengalaman pemain.

Dalam tutorial ini, saya akan menunjukkan cara membuat efek head-bobbing di Unity.

Langkah 1: Siapkan Pengontrol Pemutar

Pertama, kita perlu membuat pengontrol pemutar:

  • Buat Objek Game baru (Objek Game -> Buat Kosong) dan beri nama "Player"
  • Buat Kapsul baru (Objek Game -> Objek 3D -> Kapsul) dan pindahkan ke dalam Objek "Player"
  • Lepaskan komponen Capsule Collider dari Capsule dan ubah posisinya menjadi (0, 1, 0)
  • Pindahkan Kamera Utama ke dalam Objek "Player" dan ubah posisinya menjadi (0, 1.64, 0)
  • Buat skrip baru, beri nama "SC_CharacterController" dan tempel kode di bawah ini di dalamnya:

SC_CharacterController.cs

using UnityEngine;

[RequireComponent(typeof(CharacterController))]

public class SC_CharacterController : MonoBehaviour
{
    public float speed = 7.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;
    [HideInInspector]
    public Vector3 moveDirection = Vector3.zero;
    Vector2 rotation = Vector2.zero;

    [HideInInspector]
    public bool canMove = true;

    void Start()
    {
        characterController = GetComponent<CharacterController>();
        rotation.y = transform.eulerAngles.y;
    }

    void Update()
    {
        if (characterController.isGrounded)
        {
            // We are grounded, so recalculate move direction based on axes
            Vector3 forward = transform.TransformDirection(Vector3.forward);
            Vector3 right = transform.TransformDirection(Vector3.right);
            float curSpeedX = canMove ? speed * Input.GetAxis("Vertical") : 0;
            float curSpeedY = canMove ? speed * Input.GetAxis("Horizontal") : 0;
            moveDirection = (forward * curSpeedX) + (right * curSpeedY);

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

        // 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)
        moveDirection.y -= gravity * Time.deltaTime;

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

        // Player and Camera rotation
        if (canMove)
        {
            rotation.y += Input.GetAxis("Mouse X") * lookSpeed;
            rotation.x += -Input.GetAxis("Mouse Y") * lookSpeed;
            rotation.x = Mathf.Clamp(rotation.x, -lookXLimit, lookXLimit);
            playerCamera.transform.localRotation = Quaternion.Euler(rotation.x, 0, 0);
            transform.eulerAngles = new Vector2(0, rotation.y);
        }
    }
}
  • Lampirkan skrip SC_CharacterController ke Objek "Player" (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 Pemain di SC_CharacterController

Pengontrol Player sekarang siap:

Langkah 2: Tambahkan Efek Kepala Bobbing

Efek Head Bobbing dilakukan dengan bantuan script dan bekerja dengan menggerakkan Kamera ke Atas dan ke Bawah saat pemain bergerak.

  • Buat skrip baru, beri nama SC_HeadBobber, dan tempelkan kode di bawah ini ke dalamnya:

SC_HeadBobber.cs

using UnityEngine;

public class SC_HeadBobber : MonoBehaviour
{
    public float walkingBobbingSpeed = 14f;
    public float bobbingAmount = 0.05f;
    public SC_CharacterController controller;

    float defaultPosY = 0;
    float timer = 0;

    // Start is called before the first frame update
    void Start()
    {
        defaultPosY = transform.localPosition.y;
    }

    // Update is called once per frame
    void Update()
    {
        if(Mathf.Abs(controller.moveDirection.x) > 0.1f || Mathf.Abs(controller.moveDirection.z) > 0.1f)
        {
            //Player is moving
            timer += Time.deltaTime * walkingBobbingSpeed;
            transform.localPosition = new Vector3(transform.localPosition.x, defaultPosY + Mathf.Sin(timer) * bobbingAmount, transform.localPosition.z);
        }
        else
        {
            //Idle
            timer = 0;
            transform.localPosition = new Vector3(transform.localPosition.x, Mathf.Lerp(transform.localPosition.y, defaultPosY, Time.deltaTime * walkingBobbingSpeed), transform.localPosition.z);
        }
    }
}
  • Lampirkan skrip SC_HeadBobber ke Kamera Utama
  • Tetapkan skrip SC_CharacterController ke variabel "Controller"

Terakhir, tekan Play untuk mengujinya, Kamera berayun harus diaktifkan pada pergerakan pemain.

Sumber
📁HeadBobbing.unitypackage5.09 KB
Artikel yang Disarankan
Menambahkan Crouching ke FPS Player di Unity
Tutorial Pengontrol Worm 3D untuk Unity
Kamera Orang Ketiga dalam Unity
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Tutorial Senter untuk Unity
Cara Menambahkan Dukungan Platform Bergerak ke Pengontrol Karakter di Unity
Pengontrol Pemain Planetary berbasis benda kaku untuk Unity