Pergerakan Pemain Tingkat Lanjut di Unity
Dalam tutorial ini, kita akan menjelajahi mekanika pergerakan pemain tingkat lanjut di Unity, termasuk berlari cepat, berjongkok, dan sistem kamera yang halus. Fitur-fitur ini menambah kedalaman dan polesan pada kontrol pemain, sehingga meningkatkan pengalaman bermain secara keseluruhan. Kita akan menggunakan sistem fisika Unity untuk pergerakan dan interaksi yang realistis.
Menyiapkan Adegan
Sebelum kita masuk ke pengkodean, mari kita buat adegan dasar dengan objek pemain dan kamera:
- Buat proyek Unity baru.
- Dalam Hirarki, buat Kubus 3D, ganti namanya menjadi Pemain, dan skalakan agar menyerupai karakter (misalnya, X: 1, Y: 2, Z: 1).
- Tambahkan komponen
Rigidbody
ke Player dan atur propertiInterpolate
keInterpolate
untuk fisika yang lancar. - Tambahkan komponen
Capsule Collider
, sesuaikan tinggi dan radiusnya agar cocok dengan model pemain. - Buat GameObject kosong, beri nama CameraRig, dan lampirkan Camera ke dalamnya. Posisikan kamera di belakang dan sedikit di atas pemain.
- Jadikan CameraRig anak objek Pemain untuk mengikuti pergerakannya.
Menerapkan Pergerakan Pemain Tingkat Lanjut
Kami akan mengimplementasikan skrip yang menangani pergerakan dasar, berlari cepat, berjongkok, dan rotasi kamera yang halus.
Skrip Pergerakan Pemain
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float walkSpeed = 5f;
public float sprintSpeed = 10f;
public float crouchSpeed = 2.5f;
public float jumpForce = 5f;
public float gravity = 20f;
public Transform cameraTransform;
public float lookSensitivity = 2f;
public float maxLookAngle = 80f;
private Rigidbody rb;
private float currentSpeed;
private bool isCrouching = false;
private bool isGrounded = false;
private void Start()
{
rb = GetComponent();
rb.freezeRotation = true; // Prevent the Rigidbody from rotating
}
private void Update()
{
HandleMovement();
HandleJumping();
HandleCrouching();
HandleCameraRotation();
}
private void HandleMovement()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 move = transform.right * moveHorizontal + transform.forward * moveVertical;
move = move.normalized * currentSpeed * Time.deltaTime;
Vector3 velocity = rb.velocity;
velocity.x = move.x;
velocity.z = move.z;
rb.velocity = velocity;
}
private void HandleJumping()
{
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);
}
}
private void HandleCrouching()
{
if (Input.GetKeyDown(KeyCode.LeftControl))
{
isCrouching = !isCrouching;
currentSpeed = isCrouching ? crouchSpeed : walkSpeed;
transform.localScale = new Vector3(1, isCrouching ? 0.5f : 1, 1);
}
if (Input.GetKey(KeyCode.LeftShift) && !isCrouching)
{
currentSpeed = sprintSpeed;
}
else if (!isCrouching)
{
currentSpeed = walkSpeed;
}
}
private void HandleCameraRotation()
{
float mouseX = Input.GetAxis("Mouse X") * lookSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * lookSensitivity;
Vector3 rotation = cameraTransform.localEulerAngles;
rotation.y += mouseX;
rotation.x -= mouseY;
rotation.x = Mathf.Clamp(rotation.x, -maxLookAngle, maxLookAngle);
cameraTransform.localEulerAngles = rotation;
}
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = false;
}
}
}
Fitur Utama dan Penjelasannya
Kontrol Pergerakan dan Kecepatan
Skrip ini menggunakan Rigidbody
milik Unity untuk menggerakkan pemain, yang memungkinkan interaksi berbasis fisika. Kecepatannya bervariasi berdasarkan apakah pemain berjalan, berlari cepat, atau berjongkok. Jongkok diaktifkan dengan tombol LeftControl
, dan berlari cepat terjadi sambil menahan tombol LeftShift
.
Melompat
Metode HandleJumping
memberikan gaya ke atas saat pemain menekan tombol lompat (default: spasi), jika pemain dalam keadaan tidak bergerak. Deteksi tanah ditangani dengan memeriksa tabrakan dengan objek yang ditandai "Ground".
Kontrol Kamera
Rotasi kamera dikontrol menggunakan mouse, sehingga memberikan perspektif orang pertama atau orang ketiga berdasarkan posisi kamera. Sudut pandang dijepit untuk mencegah kemiringan berlebihan, yang dapat membingungkan pemain.
Kesimpulan
Tutorial ini menyediakan dasar untuk gerakan pemain tingkat lanjut di Unity, yang mencakup berbagai aspek seperti kontrol berbasis fisika, berlari cepat, berjongkok, dan manajemen kamera. Teknik-teknik ini dapat disesuaikan lebih lanjut dan diperluas agar sesuai dengan berbagai genre dan gaya permainan, meningkatkan pengalaman pemain dengan kontrol yang responsif dan realistis.
Ingat, pergerakan pemain merupakan aspek penting dalam permainan dan harus disesuaikan dengan saksama untuk memastikan pengalaman pemain yang memuaskan. Bereksperimenlah dengan berbagai nilai dan fitur untuk menemukan pengaturan terbaik bagi proyek Anda.