Yapay zeka nasıl yazılıyor?

Redux89

Hectopat
Katılım
3 Ekim 2020
Mesajlar
1.088
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Oyunlarda yapay zekayı nasıl yazıyorlar? Yani hangi dil, hangi motor falan. Ben şu an C# öğreniyorum Unity için. Yapay zeka için ek olarak Python öğrenmem lazım mı?
 
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?
 
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?

C# ile yapabilirsiniz. Siz belli bir kurala göre çalışan bir şey istiyorsunuz anladığım kadarı ile.
 
C# ile yapabilirsiniz. Siz belli bir kurala göre çalışan bir şey istiyorsunuz anladığım kadarı ile.

Evet öyle bir şey istiyorum. Amacım bir oyunun içindeki yapay zekaları yapmak.
Son olarak ileride Python'ı öğrenince Python'la ayrıntılı bir yapay zeka yazıp onu Unity de veya Unreal Engine'de kullanabilir miyim?
 
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]
 
Yapay zekaya yapmasını istediğin şeyler doğrultusunda bilgi verirsin ve bu bilgileri nasıl kullanacağını söylersin. Oyun içinde değişen değerlere göre öğrettiklerin doğrultusunda tepki verirler. Self - Learn yapabilen bir sistem geliştirirsen kendisine gönderilen değerlerin ortalaması ve miktarı doğrultusunda farklı değerlikte tepkiler verirler. Yapay zekanın olayı budur. C# ile rahatlıkla geliştirilebilir. İnternette bir sürü tutorial mevcuttur bu konuda.
 
Oyunlardaki NPC'ler ile genel olarak yapay zeka dendiğinde kastedilen şey aynı değil. Bildiğimiz anlamda yapay zeka makine öğrenmesi, derin öğrenme gibi metotlardan oluşuyor. Yaygın olarak Python ve R dilleri kullanılıyor. Oyunlardaki npc'leri ise herhangi bir yazılım dili ile programlayabilirsiniz. Öyle şeyler için yapay sinir ağları kullanılmaz zaten. Sadece hangi durumlarda ne tepki verecekler bunları kodlayacaksınız.
 

Yeni konular

Geri
Yukarı