Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
333
Tıklama
0
Öne Çıkarma
Unity'de Nasıl Yiyecek Sipariş Mekanizması Oluştururum?
M
5 yıl
Teğmen
Konu Sahibi

Merhabalar,

Yaklaşık 1 yıldan az bir süredir 2 kişi vaktimiz oldukça Cooking Simulator tarzında 3 boyutlu bir oyun üzerinde çalışıyoruz. Proje yavaş ilerliyor tabi haliyle, modellemeleri hazır indirmeyip hepsini kendimiz yaptığımız için programlama aşamasına yeni yeni geçiyorum.

Oyunda karşıdaki bot menüden yiyecek sipariş etsin istiyorum. Tabi işleri karıştıran olay şu; mesela bir yemekte soğan var, bazı müşteriler o soğanı istemeyecek ya da yemeğin içine bir malzeme daha eklenmesini falan isteyecek. Ben bu sipariş mekanizmasını nasıl yaparım? Kafamdaki soruları sıralarsak:

- Bot nasıl menüden rasgele yemek seçecek?
- Yine rasgele olarak nasıl yemeğe ekstra istek yapar, şu malzeme olsun bu olmasın gibi?
- Bana göre en zoru, bu yemeklerin isteğe göre doğru yapılıp yapılmadığını, yemeğin doğru kişiye verilip verilmediğini falan mekanizma nasıl takip edecek?

Oyun içi siparişlerin takibi için oyun içi ayrı bir obje oluşturup onu mu programlamalıyım yoksa her bir botun kendi içinde bir mekanizması mı olması gerek? Yoksa tamamen farklı bir sistem mi yapmalıyım?

Çoklu botlar için olacak bu sistem, hatta takım arkadaşımız olan botlar da olacak, mesela bir yemek o botun işiyse bize iş gelmeyecek. Sizce bu sistem ne kadar zor olur?





< Bu mesaj bu kişi tarafından değiştirildi Marshall-Bruce -- 2 Mart 2020; 15:54:46 >

B
5 yıl
Yüzbaşı

Scriptable obje ile ozel icerikli yemekleri hazirlarsiniz , daha sonra bunu yemekleri bir listede tutar , bot ile random sekil de o listeden yemek secersiniz.
Yapacaginiz liste Butun yemekleri iceren bir liste de olabilir ve ya Pizza adli bir liste ile istediginiz her tur pizza burada listelenir.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
M
5 yıl
Teğmen
Konu Sahibi

Sağolun hocam peki oyuncunun bir yemeğe mesela soğan koyup koymadığını ne kontrol edecek, eğer soğan koyduysa ve bot yemeği soğansız istemişse bunu da nasıl kontrol ederim? ya da tam tersi. Yemeklerin özelleştirilebilir olması olayı karışık geliyor, özelleştirme olayını yapmasam da oyunun yapısına ters. Şu küçükken oynadığımız 2 boyutlu oyunların bazılarında vardı o olay, bu işlerde acemi olduğum için tersine mühendislik yapamıyorum daha :D

Edit: Şu an aklıma child object olayı geldi, soğanın colliderıyla pizza hamurunun colliderı temas edince o soğan parçası pizzanın child objecti olacak ve bot burdan kontrol edecek ne dersiniz işe yarar mı?





< Bu mesaj bu kişi tarafından değiştirildi Marshall-Bruce -- 2 Mart 2020; 21:1:21 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Baxa
B
5 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Marshall-Bruce

Sağolun hocam peki oyuncunun bir yemeğe mesela soğan koyup koymadığını ne kontrol edecek, eğer soğan koyduysa ve bot yemeği soğansız istemişse bunu da nasıl kontrol ederim? ya da tam tersi. Yemeklerin özelleştirilebilir olması olayı karışık geliyor, özelleştirme olayını yapmasam da oyunun yapısına ters. Şu küçükken oynadığımız 2 boyutlu oyunların bazılarında vardı o olay, bu işlerde acemi olduğum için tersine mühendislik yapamıyorum daha :D

Edit: Şu an aklıma child object olayı geldi, soğanın colliderıyla pizza hamurunun colliderı temas edince o soğan parçası pizzanın child objecti olacak ve bot burdan kontrol edecek ne dersiniz işe yarar mı?
Pizza yaparken sucuk pizzada gorunur, domates corbasi yaparken sadece corbanin rengi kirmizi olur.
Ne istediginle alakali.Scriptable obje ile tarifler hazirlarsin.
Hazirladigin tarif ile , musterinin istedigi tarifin ayni olup olmadigina bakarsin.Eksik fazla urune gore islem yaptirirsin.

Mesela, Pizza malezemeleri iceren bir tarif hazirladin.
İnce hamur ,Sucuklu bir pizza tarifi hazirladin.
Bot o tarifi senden isteyecek.
Senin yaptigin pizza ile musterinin istedigi pizza daki true false a bakarsin, eksik ve fazla olmasina gore islem yaptirirsin.





< Bu mesaj bu kişi tarafından değiştirildi Baxa -- 2 Mart 2020; 14:7:57 >

< Bu ileti mobil sürüm kullanılarak atıldı >

S
5 yıl
Yarbay

Hocam bence basit bir Pizza class'ı oluşturun, bu classta bir listede de PizzaIngredient isimli classın objelerini tutun. PizzaIngredient'ın Type isimli bir enum değişkeni olsun. Bota atayacağınız özel classta da o botun hangi ingredient'ı istemediğinin bir listesini tutarsınız aynı şekilde. Enum dememin sebebi, enum'ın tanımını PizzaIngredient classının içinde tutarsınız, yeni bir malzeme ekleyeceksiniz atıyorum karides, bunu o enum'ın içine dahil ettiğiniz anda editörde PizzaIngredient değişkeni atarken karşınıza çıkacak. Botlar da kontrol edeceği zaman istemedikleri malzemeleri zaten bir listede tuttukları için aldıkları pizzanın malzeme listesiyle kendininkini karşılaştırırlar (yazacağınız kod ile).

Bunun dışında, sipariş sistemini bir objede kendi scriptinde tutun ve bu objeye müşteri objeleri kolayca erişebilsin (mesela müşteri scriptinin start metodunda FindObjectByType<SiparişSistemi> yapıp geri dönen referansın değişkende saklanması). Sipariş sisteminde de siparişleri Queue listesinde tutun (C# Queue diye aratırsanız bilgi bulabilirsiniz).

Biraz hızlıca anlattım kusura bakmayın. Sorunuz olursa cevaplamaya çalışırım.



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
M
5 yıl
Teğmen
Konu Sahibi

Hocam çok sağolun, elleriniz dert görmesin güzel anlatmışsınız. Şu an ki yoğunluğumdan dolayı biraz zaman alacak ama er geç deneyip size döneceğim.




Bu mesajda bahsedilenler: @SpesifikBrush
R
5 yıl
Yarbay

Yemek class'ının içinde, yapılanlar diye bir değişken olur. Array tipli mesela. Yemek, her malzemeyi bu array'e de ekler. Malzemelerin id numarasını veya üstte denildiği gibi enum ile tutabilirsin. Pseudocode yazıyorum:

//domates = 0, biber = 1
Class Yemek
{
List[int] istenilen, yapilan; //int tipinde liste. Html <> yazmama izin vermiyor.
bool hazir = false;
float sure;

void YeniYemek(List[int] istek)
{
istenilen = istek;
}

void OnFinish() //teslim edilince çalışacak
{
if(istenilen == yapilan)
Debug. Log(tam puan!);
}
}


Bir malzemenin eklenip eklenmediğini, sürekli collider ile kontrol etmene gerek yok bence. O malzemeyi elindeyken, tencereye dökerken collider ile kontrol edersin. Başarılı ise yapılan.add(eldekimalzeme.id)
Tabi bunları yaptıktan sonra, tenceredeki yemeğin dökülme ihtimalini de saymak lazım. Veya müşteriye, doğru yemek objesini verdiğini kontrol etmeliyiz.





< Bu mesaj bu kişi tarafından değiştirildi requizm -- 3 Mart 2020; 8:41:37 >

< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
M
5 yıl
Teğmen
Konu Sahibi

Teşekkür ederim ellerinize sağlık, anlattığınıza göre beklediğim kadar zor olmayacak gibi




Bu mesajda bahsedilenler: @Requizm
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.