Unity'de Bir Avcılık Oyunu Oluşturma
Bu eğitimde, Unity'de temel bir avcılık oyunu oluşturma sürecini ele alacağız. Bu oyun, oyuncu hareketi, hayvan yapay zekası, atış mekaniği ve bir puanlama sistemi gibi unsurları içerecek. Şunları ele alacağız:
- Proje ve ortamın kurulması
- Oyuncu kontrolleri oluşturma
- Hayvan AI'nın uygulanması
- Atış mekaniği ekleniyor
- Puanlama sistemi kurma
Projenin Kurulumu
Yeni bir Unity projesi kurarak ve ortamı oluşturarak başlayalım.
Projenin Oluşturulması
- Unity'i açın ve yeni bir 3D proje oluşturun.
- Projenize
HuntingGame
adını verin veCreate
butonuna tıklayın. - Proje penceresinde varlıklarınızı düzenlemek için
Scripts
,Prefabs
veMaterials
adlı klasörler oluşturun.
Ortamın Kurulması
- Hiyerarşi'de sağ tıklayın ve
3D Nesne > Arazi
seçeneğini seçerek bir arazi oluşturun. Arazi Araçları
'i kullanarak dokuları boyayarak, ağaçlar ekleyerek, çimen veya diğer detayları yerleştirerek araziyi özelleştirin.- Çevreyi daha gerçekçi hale getirmek için kayalar ve ağaçlar gibi birkaç 3 boyutlu nesne ekleyin.
Oyuncu Kontrolleri Oluşturma
Daha sonra oyuncu karakterini oluşturacağız ve fizik tabanlı hareket kontrollerini uygulayacağız.
Oyuncu Karakteri
- Hiyerarşi'de sağ tıklayıp
3D Nesne > Kapsül
seçeneğini seçerek bir oyuncu karakteri oluşturun. - Kapsülün adını
Oyuncu
olarak değiştirin ve arazinin üstüne yerleştirin. - Fizik tabanlı hareket için
Player
nesnesineRigidbody
bileşenini ekleyin. - Oyuncunun bakış açısını temsil etmesi için
Oyuncu
nesnesinin bir çocuğu olarakKamera
ekleyin.
Oyuncu Hareketi Senaryosu
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float rotationSpeed = 100f;
private Rigidbody rb;
void Start()
{
rb = GetComponent();
rb.freezeRotation = true;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
rb.MoveRotation(rb.rotation * turnRotation);
}
}
Scripts
klasöründePlayerMovement.cs
adında yeni bir C# betiği oluşturun.PlayerMovement
betiğiniPlayer
nesnesine ekleyin.
Hayvan AI'nın Uygulanması
Çevrede dolaşabilen ve oyuncuya tepki verebilen basit bir hayvan yapay zekası yaratacağız.
Hayvan Prefabrik
- Hayvanın (örneğin geyik) 3B modelini içe aktarın veya oluşturun.
- Modeli sahneye sürükleyin ve araziye yerleştirin.
- Hiyerarşideki modele sağ tıklayın ve bir üst nesne oluşturmak için
Boş Oluştur
öğesini seçin. AdınıGeyik
olarak belirleyin. - 3D modeli
Geyik
nesnesinin içine sürükleyin ve dönüşümünü sıfırlayın. Deer
nesnesiniPrefabs
klasörüne sürükleyerek önceden hazırlanmış nesne olarak kaydedin.
Hayvan AI Komut Dosyası
using UnityEngine;
using UnityEngine.AI;
public class AnimalAI : MonoBehaviour
{
public Transform[] waypoints;
private NavMeshAgent agent;
private int currentWaypoint = 0;
void Start()
{
agent = GetComponent();
agent.SetDestination(waypoints[currentWaypoint].position);
}
void Update()
{
if (agent.remainingDistance < agent.stoppingDistance)
{
currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
agent.SetDestination(waypoints[currentWaypoint].position);
}
}
}
Scripts
klasöründeAnimalAI.cs
adında yeni bir C# betiği oluşturun.AnimalAI
betiğiniDeer
prefabrik dosyasına ekleyin.Deer
prefabrikeNavMeshAgent
bileşenini ekleyin.- Boş GameObjects oluşturarak ve bunları istediğiniz gibi konumlandırarak sahnede yol noktaları ayarlayın. Bu yol noktalarını
AnimalAI
betiğindekiwaypoints
dizisine atayın.
Atış Mekaniği Ekleme
Oyuncunun hayvanlara ateş edebilme yeteneğini hayata geçireceğiz.
Çekim Senaryosu
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public Camera playerCamera;
public float range = 100f;
public GameObject impactEffect;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
}
Scripts
klasöründePlayerShooting.cs
adında yeni bir C# betiği oluşturun.PlayerShooting
betiğiniPlayer
nesnesine ekleyin.- Bir etki efekti (örneğin, bir parçacık sistemi) oluşturun ve bunu betikteki
impactEffect
alanına atayın.
Puanlama Sisteminin Kurulması
Oyuncunun başarılı avlarını takip edebilmek için basit bir puanlama sistemi ekleyeceğiz.
Puan Yöneticisi Komut Dosyası
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static int score = 0;
public Text scoreText;
void Update()
{
scoreText.text = "Score: " + score.ToString();
}
public static void AddScore(int points)
{
score += points;
}
}
Scripts
klasöründeScoreManager.cs
adında yeni bir C# betiği oluşturun.ScoreManager
betiğiniGameManager
adlı yeni bir boş GameObject'e ekleyin.- Puanı görüntülemek için bir UI Metin öğesi oluşturun ve bunu
ScoreManager
betiğindekiscoreText
alanına atayın.
Atış Senaryosunu Puanı Takip Edecek Şekilde Güncelleme
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
ScoreManager.AddScore(10);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
Çözüm
Unity'de temel bir avlanma oyunu oluşturduk. Projeyi ve ortamı kurduk, fizik tabanlı hareketlerle oyuncu kontrolleri oluşturduk, hayvan yapay zekası uyguladık, atış mekanikleri ekledik ve bir puanlama sistemi kurduk. Bu temel bilgi, daha karmaşık davranışlar, ek hayvanlar ve avlanma oyununuzu geliştirmek için rafine edilmiş oyun mekanikleri içerecek şekilde genişletilebilir.