Oyun yapmak için Unity3D'nin avantajları / eksileri nelerdir? [kapalı]


64

Okul projemizi Unity3d ile yapıyoruz, çünkü geçen yıl Shiva'yı kullanıyorlardı (ki bu bana korkunç geliyor) ve bu araç için bakış açınızı bilmek istedim.

Artıları:

  • çok platformlu, Google’ın Chrome’da uygulayacağını bile duydum
  • İhtiyacın olan her şey burada
  • betik dilleri guru programlamayan insanlar için iyi bir seçimdir

Eksileri:

  • çok oyunculu?
  • tescilli, tamamen birliğe ve sınırına bağlısınız ve genişletemiyorsunuz
  • daha az "sıfırdan oyun yapmak"
  • C ++ harika bir şey olurdu

Bu tür bir aracın gerçekten ilginç olduğunu düşünüyorum, ancak 3'ten fazla programlama çalışanı içeren bir proje için okulda kullanmaya değer mi? Bu tür bir aracı kullanarak programlamada gerçekten ne öğreniyoruz (python ve js ile iyiyim ama C # 'dan nefret ediyorum)? Bunun yerine Ogre'yi kullanabilirdik, hatta x'i ocaktan başlayarak öğreniyor olsak bile ...


Başka bir Con 3D modelleme / tasarıma aşina olmanız gerekecek, ancak siteye bir kez daha bakabilirsiniz ve durum böyle görünmüyor. 2D oyunlar mümkün olduğu gibi
Johnny Quest

1
@Johnny Quest Sadece bunun ne anlama geldiğini tam olarak değil, kullanımı zor hale getirebilir.
Spooks,

7
'C ++ iyi bir şey olurdu' - cidden, ne? C ++ 'da yazmak şimdi' harika 'mı? Şahsen ben dilden nefret ediyorum (tüm yazarak, Python tamamen: p), ama kesinlikle harika bir dil özelliği ve kütüphane akıllıca.
Komünist Ördek

1
Birlik inanılmaz bir motordur ama ... Farkında olunacak birkaç dezavantaj: 1) Birlik, bir miktar bellek domuzu olma eğilimindedir. Düşündüğünden çok daha fazla hafıza alıyor; muhtemelen dokular gibi şeyleri önbelleğe almaktan kaynaklanmaktadır. Bu, mobil cihazlarda hata ayıklama ve hatta OOM hatalarına neden olabilir. 2) Bir kara kutu ile ilgilendiğiniz için (kaynak kod yok) performans sorunlarını bulmak, adreslemek ve çözmek zor olabilir. Gölgelendiricilerinizi yakından inceleyin ve sahneyi nasıl yönettiğinizi izleyin.
milkplus

2
@milkplus: Bu yüzden birliğin öğrencinin öğrenmesi gereken şey olmadığını düşünüyorum. Örnek: Öğrencilere programlama hakkında, ilk başta piton öğretme konusunda eğitim veriyorum, ancak bir noktada veya başka bir durumda, onlara eşyanın nasıl çalıştığını, hatta temelleri öğretmelisiniz. İnsanlar, bu aracın ne yaptığı hakkında her şeyi bildiklerinde bir araç kullanmalıdır. Olmazsa, gerçekleşmesini bekleyen bir felaket. Knuth'un sözünü, birlik gibi karmaşık bir şeyle her zaman haklı çıkaramazsınız.
jokoon

Yanıtlar:


66

Uinty3D'nin ana "pro" si hızlı bir şekilde deliriyor. Buradaki performanstan bahsetmiyorum, geliştirme hızından bahsediyorum. Var:

  • Birleşik varlık boru hattı. Kaynak alt sistemi üzerinde zaman harcamanıza gerek yok, yazmak ve düzeltmek için buggy içe aktarma yordamları yok: sadece bir dosyayı klasöre bırakın ve işe yarıyor.
  • Entegre seviye editörü. Seviye araçlarına zaman harcamanıza gerek yok: doğrudan işe koyulun.
  • Harika ayarlamalar ve hata ayıklama desteği: tüm oyun değişkenleriniz oyun oynarken tam olarak gösterilir ve anında değiştirilebilir - ve tüm bunlar tek bir kod satırı yazmadan değiştirilebilir. İstediğiniz zaman oyunu duraklatın ya da bir seferde bir ifade ile adım atın.
  • Hazır bileşenlerin oldukça kapsamlı anlaşılması. Rendering, ses, fizik, kontroller - birçok "kazan plakası" kodu zaten yazılmıştır.
  • Bir komut dosyası sunucusu olarak Mono. Kişi bir dili C # 'nın yararları hakkında tartışabilirken, Mono'nun temel sınıf kütüphanesi birçok fonksiyon sunmaktadır. Koleksiyonlar, G / Ç, çok iş parçacıklı ve delice ifadeli LINQ, gelişimi önemli ölçüde hızlandırır.

Ayrıca, Unity3d, çoklu platformlarda gerçekten iyidir. Tabii ki, bir windows .exe oyunu oluşturamazsınız, ve sonra sihirli bir şekilde iPhone'da "sadece çalışmasını" sağlayamazsınız; ama Birlik buna oldukça yaklaşıyor. Gerekli olan “taşıma” dan daha fazla “ince ayar” yapmaktır.

Tabii ki, bazı durumlarda Unity3D ideal değildir. Unity'ye entegre ağ çok oyunculu, bazı LAN eşler arası oyun için uygun, ancak merkezi sunucu gerektiren herhangi bir şey, tüm ağ kodlarını sıfırdan yazmanızı gerektirir. Birliğin GUI sistemi oldukça ilginç ve yavaştır, bu nedenle oyun içi GUI'lerin karmaşık hale getirilmesi acı vericidir. Ancak, gördüğüm diğer tüm oyun GUI sistemleri de ağrılı, bu yüzden Unity'nin genel olarak o kadar da kötü değil.

Ve elbette Unity3D, OGRE gibi, sadece bir kütüphane / kaynak kodu sunan "oyun motorlarından" biraz daha az esnektir. Performansı tam anlamıyla birinci sınıf değil ve yalnızca bir komut dosyası çalıştırma alanınız olduğundan, onu geliştirmek için bazı akıllı düşük seviye kesmeleri kullanamazsınız. Örneğin, Unity'nin yerleşik ağaç oluşturucusu sizi bir nedenden ötürü tatmin etmiyorsa, kendinize ait olanı yazamazsınız (peki, olabilir, ancak senaryolarla çalışıyor olabilir ve büyük olasılıkla çok yavaş ve çok fazla güçlük çeker) ). Yine de, bir miktar performans kaybetme sakıncası yoksa, Unity ile ilgili herhangi bir şeyi yapmak mümkündür.

Unity3D'nin en büyük "con", kaynak kontrolüdür. Daha önce de belirtildiği gibi, Unity'nin kendi Asset Server'ı oldukça pahalı. Ve gerçekten çok zor berbat. Dallanma bile yok. Unity3D, 3. parti SCM sistemlerini teorik olarak desteklerken, bunların kullanımı da tehlike altındadır. SVN onaylandıktan sonra içe aktarma ayarlarının "sihirli bir şekilde" değiştiğini gördüm veya performans gösterdikten sonra tüm nesnelerin parametreleri kayboluyor. Bütün bunlar çalışılabilir, ancak yine de, Unity3D + Kaynak kontrolü = ağrı.

Yani, aslında sorunuzu cevaplamak için. Unity3D'nin "küçük" bir oyun için en iyisi, en iyisi değilse de oyun motoru seçimi olduğuna inanıyorum . Özellikle prototip aşamasında.

Bununla birlikte, eğer bir eğitim projesinden bahsediyorsak, 'aleyhine tavsiye ederim. Oyunların nasıl çalıştığını öğrenmek için bir tanesini olabildiğince düşük bir seviyeye yazmak daha iyidir. Oyun motorları harika bir araçtır; ancak maksimum kazanç için kullanmak için nasıl çalıştıklarını ve neden bu şekilde çalıştıklarını anlamak gerekir . Ve bunu öğrenmenin en iyi yolu, kendi oyun motorunuzu yazmak - sonunda berbat olsa bile.


3
"Birleştirilmiş varlık boru hattı. Kaynak alt sistemi üzerinde hiç zaman harcamanıza gerek yok, yazmak ve düzeltmek için hiçbir araç alma yordamı yok: sadece bir dosyayı klasöre bırakın ve işe yarıyor."
nkint

7
ve Unity3D'nin "en büyük" con'ı, kaynak kontrolüdür. "
00'de

2
ve "Eğer bir eğitim projesi hakkında konuşuyorsak, 'aleyhime tavsiye ederim" dedi.
nkint

"Ağaç gen" problemin hakkında. Bence C # 'da esepcially, bir C ++ ağacı genini yazabilir, bir .dll dosyasına yazabilir ve c ++ olarak yönetebilirsiniz. Böylece teorik olarak kendi "motor düzeltmelerinize" birliğe erişebilirsiniz.
daemonfire300

Unity GUI 2.0 sisteminin, "metinli bir sonuç ver" sisteminden başka bir şey olmadığını itiraf ediyorum, ama çok çok genişletilebilir. @AffinityUI veya çok hafif, açık kaynaklı ve UI sistemini değerli kılan diğer Unity UI projelerine bakın.
daemonfire300

28

Listenize yorum yaparak başlayacağım:

  • Script, sadece programcı olmayanlar için bir avantaj değildir. (İyi) bir programcı olmak, sadece bir dil bilmekten çok, problemleri nasıl çözeceğinizi ve belli bir şekilde düşünmeyi bilmektir. Scripting dilleri, bir programcının, daha düşük seviyeli detaylar konusunda endişe duyurken, eşdeğer sonuçlar üretmesi gerekenden daha kısa sürede daha güçlü ve daha ilginç sonuçlar üretmek için bu daha üst düzey eleştirel düşünme becerilerinden yararlanmasına izin verebilir. akla geliyor) resme zorla.

  • Çok oyunculu destek (ya da eksikliği), projenizin ihtiyaç duyması halinde yalnızca bir ya da başka sorun.

  • Ne kadar "özel" bir mahkum olduğunu göremiyorum. Bu bir okul projesiyse, muhtemelen kullandığınız çerçevenin kaynağını kesmek için zaman harcamak istemeyeceksiniz veya herhangi bir şey. Ayrıca, DirectX de tescillidir.

  • Üst düzey çerçeveleri veya Unity gibi araçları kullanmakta kesinlikle yanlış bir şey yoktur. "Sıfırdan bir oyun yapmak" bir başarı değil - tam olarak "sıfırdan" ne düşünüyorsunuz? Hala başka birinin grafik API'sini kullanacaksınız. Başka birinin çalışma zamanı (C bile çalışma zamanı kitaplığı gerektirir). “Oyun yapmak”, “yararlı araçlar kullanmadan oyun yapmak” değil, saygı kazanıyor.

  • C ++ "havalı" bir şey olmak biraz özneldir. Dil, sektördeki uzmanlar tarafından çok sık kullanılıyor, ancak muhtemelen sizin düşündüğünüz nedenlerden dolayı kullanılmıyor. Bir dil olarak, yaşını göstermeye başlıyor ve daha modern seçeneklere kıyasla oldukça hantal olabiliyor. Her durumda, diller sadece araçlardır ve iyi bir programcının göreceli kolaylıkla yenilerini seçebilmesi gerekir.

Unity'yi okul projeniz için kullanmanın en büyük avantajı, sizin için halihazırda sizin için halihazırda bir çok altyapı çalışmasının yer aldığı üst düzey bir çerçeve olmasıdır - bu, bir temel kurmaya değil oyununuza odaklanmanıza olanak sağlayacaktır . Muhtemelen, bu oyunu üretmek için mevcut araçlardan daha fazla yararlanabilmeniz için daha sınırlı bir pencereye sahip olursunuz, oyuna özgü ve mantık veya varlıklar üretmek için daha fazla zaman harcarsınız ve oyununuzu daha iyi hissetmenizi sağlar. daha eksiksiz - Birlik için bir öğrenme eğrisi var, ancak emrinizde çok daha hızlı bir şekilde sonuçlanıyor.

Dezavantajı, aktarımı mümkün olmayabilecek bilgileri içeren belirli bir aracı öğrenmeye zaman kaybetme potansiyelinizdir , özellikle de Birliğin iş akışının ve ortamının sizin için olmadığını ve bir daha kullanmak istemediğinize karar verirseniz . Ayrıca, Unity en bariz 2D iş akışına sahip değil - sanat varlıklarında genel olarak yer alma eğiliminde olan genel giderlerin olduğu 3D oyunlara odaklandı. Ama bence, sizin tarif ettiğiniz gibi bir okul projesi için, Birliğin oldukça iyi bir seçim olduğunu düşünüyorum.


13
"Bir oyun yapmak" ifadesinin, "yararlı herhangi bir araç kullanmadan oyun yapmak" değil, saygı duyduğu şey olduğunu söyleyeceğim.
00'de

2
“Üst düzey çerçeveleri veya Birlik gibi araçları kullanmakta kesinlikle hiçbir yanlış yoktur.” Sıfırdan bir oyun yapmak ”bir başarı değildir -“ sıfırdan ”tam olarak ne düşünüyorsunuz? yeni teknolojiler yaratmak insanlar örneğin mümkün olduğunca düşük seviyede gidiyoruz akla Uncharted 2 hatta ev modifiye grafik API bir kullanılır.
concept3d

1
Bilgisayar grafiğinin mutlak üstünlüğünde olmak isteyen herhangi bir geliştiricinin en düşük seviyeye odaklanması ve kendi motorunu oyunlarında yapması gerekir; ama bu göründüğü gibi tüm oyun geliştiricilerin yaklaşık% 1'i. Eğer bir şirket Uncharted 1 kadar gelişmiş bir oyun oynuyorsa, Uncharted 3 çıkarken, muhtemelen bazı birliği (mutlaka Birlik değil) kullanabilirlerdi. Soru şu: Uncharted 4'ü mü yaratıyorsunuz?
Katana314

9

Birlik ile ilgili büyük sorunlardan biri kaynak kontrolüdür. Eğer bir takımda çalışmıyorsanız, bu kadar önemli olmayacak (tartışmalı), ancak durum böyle olmayacak.

Unity Asset Server kullanabilirsiniz, ancak bunun için 1) Unity Pro (1500 ABD Doları) ve 2) kişi başına bir Asset Sunucu Lisansı (500 ABD Doları) gerekir. Bir tür eğitim indirimi elde edebileceğinizi farz ediyorum, ancak ücretsiz değil.

Alternatif olarak, Unity ile SVN gibi bir şey kullanabilirsiniz. Düzgün desteklemesi için hala Unity Pro'ya ihtiyacınız var.

Unity’nin profesyonel olmayan bir sürümünü SVN’de gerçekten kontrol edemez ve kusursuz çalışmasını bekleyemezsiniz. GUID'leri varlıklara vb. Bağlama mekanizmaları tam olarak SCM için güvenli değildir.


Çok oyunculu işlevsellik oldukça iyi, ancak dürüst olmak gerekirse, onunla bir oyun oynamadım. Teoride, şeylere sadece ağ görünümleri ekler ve doğru çoğaltmayı ayarlamak için ne serileştirmek istediğinizi söylersiniz. Oradan diğer akranlarla bağlantı kurmak ve kurmak için bazı UI çalışmaları var. Yine de çoğunlukla eşler arası. Başsız modda birliği çalıştıran istemci / sunucu programlamasını yapabilirsiniz, ancak bununla uğraşmadım. Ancak sadece A kişisinin B kişisinin ekranında dolaşması kolay ve hızlıdır.

Ayrıca C # endişeliyim kadar pozitif . LINQ süper etkileyicidir. İstisna işleme ve çöp toplama özel durumu var. Delegeler, lambdalar, arayüzler ve C ++ 'dan daha iyi genel destek gibi çok daha modern paradigmalara sahiptir. ( Düzenleme : bu açıkça tartışmalı. Benim açımdan C # 'nın pek de kötü bir dil olmadığı. Dilin lehte ve aleyhte olanlar hakkında uzun bir tartışmaya girmek istemiyorum.)

Bununla birlikte, Birliği kullanmanın en büyük pozitifliği muhtemelen sanat boru hattıdır. Klasörde bir PSD veya Max dosyası (3ds max kurulu olduğu varsayılarak) alabilir ve içe aktarılabilir.


3
@DeadMG, evet, aslında çok iyi. Evet, destek, şablon metaprogramlama, vs. hakkında bilgim var. Ama C # 'ı daha modern bir dil olarak görüyorum.
Tetrad

3
@DeadMG Ben C + 'ın istenen çok şey bıraktığı birçok kullanım durumları için C #' nın son derece yumuşak olduğunu düşünüyorum. C ++ bu şeyleri yapamaz.
Nate

3
Listesinde aynı fikirde olamayacağım tek şey 'C ++' dan daha iyi genel destek oldu.
Kylotan

1
@Kylotan "için (vektör <vektör <int>> :: iterator iterator = vektörler.begin (); iterator! = Score.end (); iterator ++) {" VS "foreach (puanlardaki puanlar) .yup, C # ile birlikteyim.
Katana314

3
@ C Tabii Katana314 11 ++: for ( auto x : xs ).
Eric

6

Güncelleme: Unity şimdi ücretsiz sürümde bile tüm bu özellikleri sunuyor, bu nedenle lütfen aşağıdaki cevabı dikkate almayın.


Unity3D'nin ücretsiz sürümünü kullanıyorsanız, işlem sonrası gölgelendiriciler (çiçeklenme gibi) ve daha da önemlisi dinamik gölgeler dahil olmak üzere çeşitli efektler kullanamazsınız. Bunlar açıkça proje için iş akışını çok fazla etkilemeyecek, ancak motorla ücretsiz olarak ne yapılabilecekleri üzerine kısıtlamalar getirecekler.


1
Bu artık doğru değil ve güncellenmeli veya kaldırılmalıdır.
MichaelHouse

@ Byte56 Teşekkürler. Gelecekte, bir yorum yapmanıza gerek kalmadan eski yayınları kendiniz güncelleyebilmelisiniz.
Michael Younkin

Bu yanıtı kaldırmak için bir bayrağa yanıt veriyordum ve artık doğru olmadığını söylemek için güncellemenizi önermiyordum. Doğru olması için güncellemenizi veya kaldırmanızı öneriyordum. Bu cevap şu anda Unity 3D'nin artılarını ve eksilerini bir seçenek olarak cevaplamıyor. Eminim onu ​​kurtarmanın bir yolunu bulabilirsin. (Birliğin şu anda sağladığı tüm özellikleri ve ücretsiz kullanmadıklarını içerecek şekilde güncelleyebilirsiniz).
MichaelHouse

3

Nevermind'in cevabı, işleri oldukça ayrıntılı bir şekilde ele alıyor, ancak sadece olayların kaynak kontrolünü ele geçirmek için, bir avuç dolusu avuç içine bakmayı öğrendiğinizde aslında o kadar da kötü değil:

  • Öncelikle, evet Varlık Sunucusu pahalıdır ve temel kullanım dışında hepsi için oldukça korkunçtur. En büyük yararı, Birliğe entegre olmaktır ve bu, basit projelerde kullanım kolaylığı ve buna değer olması için değerli iken, daha büyük bir şey için (genellikle AS için bütçeli projeler olur), sadece yeterince esnek değildir.
  • Harici sürüm kontrolüne geçerken, Meta Dosyaların başka herhangi bir varlık gibi ele alınması ve her zaman sürüm kontrolüne eklenmesi / güncellenmesi gerektiğinin fark edilmesi önemlidir. Bunu yapmamak Nevermind’in ayarların kaybolması senaryosunda olanların gerçekleşmesi muhtemel.
  • Son olarak, Unity'deki (Asset Sunucusu dahil) herhangi bir versiyon kontrol sistemiyle çalışırken, takım iletişimi, birbirlerinin işlerinde durmamak için ikili varlıklarla çalışırken şart olur.

Bu noktalarla ilgili daha fazla ayrıntı istemeniz durumunda, bir süre önce oldukça büyük Unity projelerindeki deneyimlerime dayanarak Unity ile git'i kullandım: http://goo.gl/ivJVR


Tamam, vay, afedersiniz. Sadece bunun 2011'de istendiğini (ve cevapladığını) fark ettim! Buna ekledim, çünkü bu hafta stackexchange gamedev haber mektubunda belirdi .
FlintZA

SE'de "necro" diye bir şey yoktur. Durumda, benim yorumum. : P
Cypher,

2

Aslında. Çok oyunculu desteklenir. Bu sadece oyununu çalıştırmak istediğin bir sunucuyu seçme meselesi.

Şimdi piyasadaki en sıcak olanı "SmartFox Server" dır ve hepsi bir ölçüde ücretsiz olan birkaç farklı paket sunarlar. Her paket belirli miktarda oyuncuya "bedava" izin verdiğinden, belirli miktarda oyuncu almayı planlıyorsanız ücretsizdir.

Yükseltmeyi seçtiyseniz, bir indie geliştirici için fiyat oldukça dik. Yani ... Uzun vadede, sunucunuzda çok fazla oyuncu varsa, bedava bir oyun olarak Download.com gibi sitelere yüklemek yerine, oyununuz için ücret ödemeniz gerekecek. Bu, bazıları için bir sorun olmayabilir, ancak çoğumuz bir sunucu için 2.500 ABD doları tutarında cep harcayamazız.

Örneğin - SmartFox pro 20 oyuncuya ücretsiz izin veriyor. Yükseltme yapmak isterseniz, size biraz daha fazla olan, 600-700 civarında olan ve 100 bağlantıya izin veren 500 Euro'ya mal olacak.

Bir sonraki yükseltme maksimum 500 oyuncu içindir ve 1000 Euro'dur, ancak ... 1000'i ödemek zorunda değilsiniz, farkı siz ödersiniz.

Bu yüzden, 1000'in tamamı yerine yalnızca 500 Euro daha ödeyeceksiniz. Son güncellemeler, 2.000 Euro için sınırsız sayıda bağlantıyı desteklemektedir. Neredeyse 3 bin dolar olan ABD.

Bu yüzden, 500 bağlantıdan yükseltme yaparsanız, 1000 Euro ödersiniz, 100 bağlantıdan yükseltme yaparsanız, 1.5000 Euro ödersiniz ve tabii ki, ücretsiz yükseltme için 2.000 Euro ödersiniz.

Ayrıca, bu sunucunun Unity ile kurulumu çok kolaydır ve tam olarak Youtube'da nasıl yapılacağına dair çok sayıda öğretici video vardır.


2005'ten beri SmartFox Server ile yoğun bir şekilde çalıştım ve çok büyük bir zaman alıyor. Çok kararlı ve olgun.
PippoApps.com
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.