Yani yapay zeka dediğim böyle basit NPC'ler gibi. Mesela bir yerde zombi var seni görüyor. Sen saklanıyorsun. Oradan böyle bir süre ayrılmıyor. Çünkü orada olduğunu biliyor. Bir süre sonra gidiyor. Gibi. Bunun için farklı dil öğrenmeme gerek var mı? Yoksa C# la yapabilir miyim?
Unity ve C# ile yapabilirsin bu anlattıklarını. Biraz önce bir konu açıldı oraya yazdım buraya da yazayım.
Karar verme yapılarının çoğu Finite State Machine ile yapılıyor.
Bunun dışında yardımcı elementler var mesela yol bulma algoritmaları için genelde A* algoritması kullanılıyor.
Fsm için buraya bakabilirsin
Finite-State Machines: Theory and Implementation
A* için Türkçe kaynak
A Yıldız Arama Algoritması (A Star Search Algorithm, A*)
Unity özelinde FSM yapmak için genelde Animator kullanılır.
Karakterin görüş açısında olup olmadığını algılamak için ise, ana objeden bir adet ray atıyorsun, rayin çarptığı obje ile attığın obje arasındaki açı önceden belirlenmiş bir sayıdan küçükse o görüş alanındadır. Büyük ise değildir gibi bir mantık uygulayabilirsin, zamanında yapmıştım biraz karışık olmuştu ama sana direk static method atayım. Oradan bakarak anlarsın belki, şu an baktığımda bende çok anlayamadım deneyip kafa yormam gerekli.
[CODE lang="csharp" title="InFov"]public static bool InFov(Transform checkingObject, Transform target, Transform direction, float maxAngle, float radius)
{
Vector3 directionBetween = (target.position - checkingObject.position).normalized;
directionBetween.z = 0;
float angle = Vector3.Angle(checkingObject.forward, directionBetween);
Debug.DrawRay(checkingObject.position, (direction.position - checkingObject.position) * Mathf.Infinity, Color.red, 0.02f);
// print("ANGLE: " + angle);
if (angle < maxAngle)
{
Ray ray = new Ray(checkingObject.position, direction.position - checkingObject.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, radius))
{
print("HİT TRANSFORM: " + hit.transform);
if (hit.transform == target)
return true;
}
return false;
}
return false;
}[/CODE]