Unity'de NavMesh ve NavMeshAgent nasıl çalışır? Dinamik engeller nasıl ele alınır?

Cevap

NavMesh, sahnedeki yürünebilir yüzeylerin önceden hesaplanmış (bake edilmiş) poligon temsilidir. NavMeshAgent bu mesh üzerinde A* benzeri yol bulma yapar ve karakteri yol boyunca çarpışmadan hareket ettirir. Unity 2022+ sürümlerinde bu araçlar AI Navigation paketindedir ve NavMeshSurface bileşeni ile bake edilir.

Temel parçalar:

  • NavMeshSurface: Bake ayarları (agent yarıçapı, yükseklik, max eğim, basamak yüksekliği).
  • NavMeshAgent: Hız, ivme, dönüş hızı, durma mesafesi, obstacle avoidance.
  • NavMeshObstacle: Hareketli engeller; Carve açılırsa mesh'te delik açar.
  • NavMeshLink / Off-Mesh Link: Zıplama, merdiven gibi kopuk bölgeleri bağlar.
  • Area cost: Çamur, su gibi bölgelere maliyet vererek yol tercihini etkilemek.
using UnityEngine;
using UnityEngine.AI;

public class Chaser : MonoBehaviour
{
    [SerializeField] Transform target;
    NavMeshAgent agent;
    float repathTimer;

    void Awake() => agent = GetComponent<NavMeshAgent>();

    void Update()
    {
        repathTimer -= Time.deltaTime;
        if (repathTimer <= 0f)
        {
            agent.SetDestination(target.position);  // her karede değil
            repathTimer = 0.25f;
        }
    }
}

Dinamik engeller: Sürekli hareket eden engellerde Carve kapalı tutulur (sadece avoidance); duran bir kapı veya kutu için Carve + Carve Only Stationary kullanılır. Prosedürel üretilen level'larda NavMeshSurface.BuildNavMesh() ile runtime bake yapılabilir.

Performans: SetDestination'ı her karede çağırmayın; çok sayıda agent'ta avoidance kalitesini düşürmek gerekebilir.

  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?OrtaUnity & C#Game Dev
  4. C# delegate, event ve UnityEvent arasındaki farklar nelerdir?OrtaUnity & C#Game Dev
  5. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  6. C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?OrtaUnity & C#Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle