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;
Carveaçı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.
İlgili Unity & C# soruları
- Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?
- GetComponent çağrılarını neden önbelleğe almalısınız?
- Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?
- C# delegate, event ve UnityEvent arasındaki farklar nelerdir?
- Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?
- C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.