Bir oyunda oyuncu ve düşman AI'yı uygulamaya başlıyorum, ancak bunu bileşen tabanlı bir oyun mimarisinde en iyi şekilde nasıl uygulayacağım konusunda kafam karıştı.
Diyelim ki sabit, hareketli ve kılıcı sallayabilen takip eden bir oyuncu karakterim var. Bir oyuncu, hem hareketli hem de hareketli durumdan salıncak kılıcına geçebilir, ancak oyuncu ayakta durmadan ya da etrafta koşmaya devam etmeden önce salıncak tamamlanmalıdır. Dönüş sırasında, oyuncu dolaşamaz.
Gördüğüm gibi iki uygulama yaklaşımım var:
- Tüm oynatıcı mantığını içeren tek bir AI bileşeni oluşturun (ya asıl bileşenden ayrıştırılmış ya da bir PlayerAIComponent olarak gömülmüş). Müzikçaların varlığını oluşturan tek tek bileşenler arasında bağlantı oluşturmadan durum kısıtlamalarını nasıl kolayca uygulayabileceğimi kolayca söyleyebilirim. Ancak, AI bileşeni parçalanamaz. Örneğin, yalnızca ayakta durabilen ve dolanabilen veya etrafta dolaşabilen ve zaman zaman bir kılıcı döndüren bir düşmana sahipsem, yeni AI bileşenleri oluşturmam gerekir.
- Her biri belirli bir durumu tanımlayan bileşenlerin davranışını parçalayın. Daha sonra bir StandComponent, WalkComponent ve SwingComponent alıyorum. Geçiş kurallarını uygulamak için her bir bileşeni birleştirmek zorundayım. SwingComponent, salıncak süresince StandComponent ve WalkComponent'ı devre dışı bırakmalıdır. Sadece etrafta duran, zaman zaman bir kılıcı sallanan bir düşmana sahip olduğumda, SwingComponent'in yalnızca mevcutsa WalkComponent'i devre dışı bıraktığından emin olmalıyım. Bu, daha iyi bir karışım ve eşleştirme bileşenine izin vermesine rağmen, bir bağımlılık her eklendiğinde, bir bakım kabusu ortaya çıkmasına rağmen, mevcut bileşenlerin, karaktere bağımlılığın koyduğu yeni gerekliliklerle güzel bir şekilde oynayacak şekilde güncellenmesi gerekir.
İdeal durum, bir tasarımcının, tek bir motor satırına veya komut dosyası koduna dokunmak zorunda kalmadan, bileşenleri bir kaba sürükleyerek yeni düşmanlar / oyuncular kurabilmesidir. Her ne kadar kod kodlamanın engellenebileceğinden emin olmasam da, mümkün olduğu kadar basit tutmak istiyorum.
Hepsini özetleyin: Varlık değişkenlerini daha kolay oluşturmak için tüm AI mantığını bir bileşene bölmeli miyim yoksa her mantık durumunu ayrı bileşenlere mi bölmeliyim?
düzenleme : Birinci ve ikinci durumla ne kastettiğim konusunda bir karışıklık olduğundan şüpheleniyorum. Aşağıdaki diyagramda açıklamaya çalıştım.
Bireysel devletlerle varlık arasındaki ilişkiyi not edin. İlk durumda, bir AI bileşeni işletmeye alınmadan önce önceden inşa edilmiştir. Bir tasarımcı, yalnızca programcı tarafından sunulan farklı AIComponents kümesi arasından seçim yapabilir. İkinci durum, diğer bileşenlerle aynı düzeyde farklı durumlara sahiptir. Bir tasarımcı artık bir programcının müdahalesi olmadan benzersiz AI ile bir varlık yaratabilir.
Asıl soru, AI'yı bileşen tabanlı bir kuruluşta yapılandırmak için sadece iki seçenek ve eğer öyleyse, maksimum esneklik sağlayacak olan nedir?