Unity 3D First Person Controller Kodları
Unity’de bir First-Person karakter kontrolü için kullanılabilecek bir C# scripti sizlerle paylaşıyorum. Bu script fare hareketlerini algılar ve karakterin hem yönünü hem de kamera açısını fare girişlerine göre ayarlar. Ayrıca hareket tuşlarıyla karakteri ileri, geri, sağa ve sola hareket ettirebilirsiniz.
Bu scriptin adı “FirstPersonController” olmalı. Farklı isim kullanacaksanız class adını değiştirmeyi unutmayın.
Kullanım Talimatları
- Kamera ve Karakter Yapılandırması:
- Kamera: Sahnedeki kamerayı seçin ve bu scripti kameraya ekleyin.
- Player Body: Sahnedeki hareket ettirmek istediğiniz karakteri (ör. bir kapsül) oluşturun ve kameranın içinde bir child objesi olarak ayarlayın.
- Script:
playerBody
alanına, hareket ettirmek istediğiniz karakterin ana GameObject’ini (ör. kapsül) sürükleyin.
- Mouse Sensitivity ve Movement Speed:
- İhtiyacınıza göre
mouseSensitivity
vemovementSpeed
değerlerini ayarlayın.
- İhtiyacınıza göre
- Oyun Testi:
- Sahneyi çalıştırın. Fareyi sağa-sola çevirdiğinizde karakter dönmeli, yukarı-aşağı hareket ettirdiğinizde kamera açısını değiştirmeli ve klavyedeki “W, A, S, D” tuşları ile hareket edebilmelisiniz.
Bu script hem fare hem de klavye hareketlerini güzel bir şekilde birleştirir. Herhangi bir sorunuz olursa veya özelleştirme isterseniz, bana bildirin! 😊
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
public float movementSpeed = 5f;
private float xRotation = 0f;
void Start()
{
// Fare imlecini kilitler.
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
// Fare girişlerini al.
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
// Yukarı aşağı bakış açısını sınırla.
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
// Kamera dönüşü.
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * mouseX);
// Hareket girişlerini al.
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 direction = transform.right * horizontal + transform.forward * vertical;
// Karakteri hareket ettir.
playerBody.position += direction * movementSpeed * Time.deltaTime;
}
}