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
HuntingGameadını verin veCreatebutonuna tıklayın. - Proje penceresinde varlıklarınızı düzenlemek için
Scripts,PrefabsveMaterialsadlı klasörler oluşturun.
Ortamın Kurulması
- Hiyerarşi'de sağ tıklayın ve
3D Nesne > Araziseç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ülseçeneğini seçerek bir oyuncu karakteri oluşturun. - Kapsülün adını
Oyuncuolarak değiştirin ve arazinin üstüne yerleştirin. - Fizik tabanlı hareket için
PlayernesnesineRigidbodybileşenini ekleyin. - Oyuncunun bakış açısını temsil etmesi için
Oyuncunesnesinin bir çocuğu olarakKameraekleyin.
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);
}
}ScriptsklasöründePlayerMovement.csadında yeni bir C# betiği oluşturun.PlayerMovementbetiğiniPlayernesnesine 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ıGeyikolarak belirleyin. - 3D modeli
Geyiknesnesinin içine sürükleyin ve dönüşümünü sıfırlayın. DeernesnesiniPrefabsklasö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);
}
}
}ScriptsklasöründeAnimalAI.csadında yeni bir C# betiği oluşturun.AnimalAIbetiğiniDeerprefabrik dosyasına ekleyin.DeerprefabrikeNavMeshAgentbileşenini ekleyin.- Boş GameObjects oluşturarak ve bunları istediğiniz gibi konumlandırarak sahnede yol noktaları ayarlayın. Bu yol noktalarını
AnimalAIbetiğindekiwaypointsdizisine 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);
}
}
}ScriptsklasöründePlayerShooting.csadında yeni bir C# betiği oluşturun.PlayerShootingbetiğiniPlayernesnesine ekleyin.- Bir etki efekti (örneğin, bir parçacık sistemi) oluşturun ve bunu betikteki
impactEffectalanı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;
}
}ScriptsklasöründeScoreManager.csadında yeni bir C# betiği oluşturun.ScoreManagerbetiğiniGameManageradlı yeni bir boş GameObject'e ekleyin.- Puanı görüntülemek için bir UI Metin öğesi oluşturun ve bunu
ScoreManagerbetiğindekiscoreTextalanı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.