Apa pro / kontra Unity3D sebagai pilihan untuk membuat game? [Tutup]

64

Kami sedang mengerjakan proyek sekolah kami dengan Unity3d, karena mereka menggunakan Siwa tahun sebelumnya (yang tampaknya mengerikan bagi saya), dan saya ingin tahu sudut pandang Anda untuk alat ini.

Pro:

  • multi platform, saya bahkan mendengar Google akan mengimplementasikannya di Chrome
  • semua yang Anda butuhkan ada di sini
  • bahasa scripting menjadikannya pilihan yang baik bagi orang-orang yang tidak memprogram guru

Cons:

  • multipemain?
  • kepemilikan, Anda benar-benar bergantung pada persatuan dan batasnya dan tidak dapat memperpanjangnya
  • itu kurang "membuat game dari awal"
  • C ++ akan menjadi hal yang keren

Saya benar-benar berpikir alat semacam ini menarik, tetapi apakah itu layak untuk digunakan di sekolah untuk proyek yang melibatkan lebih dari 3 orang pemrograman? Apa yang sebenarnya kita pelajari dalam hal pemrograman dari penggunaan alat semacam ini (saya baik-baik saja dengan python dan js, tapi saya benci C #)? Kita bisa menggunakan Ogre sebagai gantinya, bahkan jika kita belajar langsung x mulai Januari ...

jokoon
sumber
Con lainnya adalah Anda harus terbiasa dengan pemodelan / desain 3D, tetapi tampilan lain di situs ini dan ini tampaknya tidak terjadi .. karena game 2D dimungkinkan
Johnny Quest
1
@ Johnny Quest Hanya tidak benar-benar dimaksudkan untuk apa mungkin membuatnya canggung untuk digunakan.
Spooks
7
'C ++ akan menjadi hal yang keren' - serius, apa? Menulis dalam C ++ 'keren' sekarang? Secara pribadi saya benci bahasa (semua pengetikan, Python sepanjang jalan: p), tetapi tentu saja ini adalah fitur bahasa yang hebat dan perpustakaan bijaksana.
Bebek Komunis
1
Unity adalah mesin yang luar biasa tetapi ... Beberapa hal yang perlu diperhatikan: 1) Unity cenderung menjadi semacam memory hog. Dibutuhkan lebih banyak memori daripada yang Anda pikirkan; mungkin karena caching hal-hal seperti tekstur. Ini dapat menyebabkan masalah debugging dan bahkan kesalahan OOM pada perangkat seluler. 2) Masalah kinerja mungkin sulit ditemukan, diatasi, dan diperbaiki karena Anda berurusan dengan kotak hitam (tidak ada kode sumber). Periksa shader Anda dengan cermat dan saksikan bagaimana Anda mengelola adegan tersebut.
milkplus
2
@ Milkplus: itu sebabnya saya pikir persatuan bukan yang harus dipelajari siswa. contoh: Saya baik-baik saja untuk mengajar siswa tentang pemrograman, mengajar mereka python pada awalnya, tetapi pada satu titik atau lain, Anda harus mengajar mereka tentang cara kerja level level, bahkan dasar-dasarnya. Orang harus menggunakan alat ketika mereka tahu segalanya tentang apa yang dilakukan alat itu. Jika tidak, ini adalah bencana yang menunggu untuk terjadi. Anda tidak bisa selalu membenarkan kutipan Knuth dengan sesuatu yang kompleks seperti persatuan.
jokoon

Jawaban:

66

"Pro" utama dari Uinty3D adalah sangat cepat. Saya tidak berbicara tentang kinerja di sini, tetapi tentang kecepatan pengembangan. Kamu punya:

  • Pipa aset terpadu. Tidak perlu menghabiskan waktu pada subsistem sumber daya sama sekali, tidak ada rutinitas impor kereta untuk menulis dan memperbaiki: cukup masukkan file ke folder, dan itu berfungsi.
  • Editor tingkat terintegrasi. Tidak perlu menghabiskan waktu untuk alat level: langsung saja ke bisnis.
  • Dukungan tweaker dan debugging yang hebat: semua variabel gameplay Anda ditampilkan tepat saat Anda bermain, dan dapat diubah dengan cepat juga - dan semua ini tanpa menulis satu baris kode pun. Hentikan permainan kapan saja, atau selesaikan kode satu pernyataan pada satu waktu.
  • Pustaka yang cukup komprehensif tentang komponen yang sudah jadi. Rendering, suara, fisika, kontrol - banyak kode "boilerplate" sudah ditulis.
  • Mono sebagai host skrip. Sementara orang dapat berdebat tentang manfaat C # sebagai bahasa, perpustakaan kelas dasar Mono menawarkan banyak fungsi. Koleksi, I / O, multithreading, dan LINQ yang sangat ekspresif semuanya mempercepat pengembangan secara signifikan.

Juga, Unity3d sangat bagus di banyak platform. Tentu saja, Anda tidak dapat membuat, katakanlah, game windows .exe dan kemudian secara ajaib memilikinya "hanya berfungsi" pada iPhone; tapi Unity mendekati itu. Yang diperlukan adalah "mengutak-atik" lebih dari "porting".

Tentu saja, dalam beberapa kasus Unity3D tidak ideal. Multiplayer jaringan yang terintegrasi dalam Unity adalah OK untuk beberapa bermain LAN peer-to-peer, tetapi apa pun yang membutuhkan server pusat cukup banyak mengharuskan Anda menulis semua kode jaringan dari awal. Sistem GUI Unity cukup unik dan lambat, sehingga membuat GUI dalam game yang rumit itu menyusahkan. Namun, semua sistem GUI gim lain yang saya lihat juga menyakitkan, jadi Unity tidak terlalu buruk secara keseluruhan.

Dan, tentu saja, Unity3D sedikit kurang fleksibel daripada "mesin game" seperti OGRE, yang hanya menawarkan pustaka / kode sumber. Kinerjanya tidak benar-benar top-notch, dan karena Anda hanya memiliki kotak pasir scripting, Anda tidak dapat menggunakan beberapa hack tingkat rendah yang pintar untuk memperbaikinya. Misalnya, jika renderer pohon bawaan Unity tidak memuaskan Anda karena alasan tertentu, Anda tidak dapat menulis sendiri (well, Anda bisa, tetapi itu akan bekerja melalui skrip dan kemungkinan besar terlalu lambat dan terlalu banyak kerumitan ). Namun, dimungkinkan untuk melakukan apa saja dengan Unity selama Anda tidak keberatan kehilangan sedikit kinerja.

"Kon" terbesar dari Unity3D, adalah kontrol sumber. Seperti yang telah disebutkan, Aset Server Unity sendiri harganya cukup mahal. Dan itu menyebalkan, benar-benar, sangat sulit. Bahkan tidak bercabang. Sementara Unity3D secara teoritis mendukung sistem SCM pihak ke-3, menggunakannya juga dilengkapi dengan bahaya. Saya telah melihat pengaturan impor "secara ajaib" berubah setelah SVN melakukan, atau parameter semua objek hilang setelah menggunakan Perforce. Semua ini dapat dikerjakan, tapi bagaimanapun, Unity3D + Kontrol sumber = rasa sakit.

Jadi, untuk benar-benar menjawab pertanyaan Anda. Saya percaya Unity3D adalah salah satu yang terbaik, jika bukan yang terbaik, pilihan mesin gim untuk gim "kecil". Terutama di tahap prototipe.

Yang mengatakan, jika kita berbicara tentang proyek pendidikan, saya sarankan menentangnya. Untuk mempelajari cara permainan bekerja, lebih baik menulis satu pada level serendah mungkin. Mesin gim adalah alat yang hebat; tetapi untuk menggunakannya untuk keuntungan maksimal, perlu dipahami bagaimana cara kerjanya, dan mengapa mereka bekerja seperti itu. Dan cara terbaik untuk mempelajari ini adalah menulis mesin gim Anda sendiri - meskipun pada akhirnya hasilnya jelek.

Lupakan
sumber
3
Saya akan mengutip "Pipeline aset terpadu. Tidak perlu menghabiskan waktu pada subsistem sumber daya sama sekali, tidak ada rutinitas impor kereta untuk menulis dan memperbaiki: cukup taruh file ke dalam folder, dan itu berfungsi."
nkint
7
dan "con" terbesar "dari Unity3D, bagaimanapun, adalah kontrol sumber."
nkint
2
dan "Yang mengatakan, jika kita berbicara tentang proyek pendidikan, saya sarankan menentangnya."
nkint
Tentang masalah "gen pohon" Anda. Saya pikir esepcially dalam C #, Anda dapat menulis gen pohon C ++, memasukkannya ke dalam .dll dan memperlakukannya sebagai dikelola c ++. Jadi, Anda dapat secara teoretis mengakses "perbaikan mesin" Anda sendiri menjadi satu.
daemonfire300
Saya akui bahwa sistem Unity GUI 2.0 tidak lain, daripada "render a rect with text" -system, tetapi sangat mudah diperpanjang. Lihatlah @AffinityUI atau proyek Unity UI lainnya yang sangat ringan, open-source, dan manfaatkan sistem UI.
daemonfire300
28

Saya akan mulai dengan mengomentari daftar Anda:

  • Scripting bukan hanya bermanfaat bagi non-programmer. Menjadi seorang programmer (baik) lebih dari sekedar mengetahui bahasa, tetapi juga mengetahui cara mendekonstruksi masalah dan berpikir dengan cara tertentu. Bahasa scripting dapat memungkinkan seorang programmer untuk meningkatkan keterampilan berpikir kritis tingkat tinggi untuk menghasilkan hasil yang lebih kuat, lebih menarik dalam waktu yang lebih sedikit daripada yang dia mungkin perlu untuk menghasilkan hasil yang setara sementara juga khawatir tentang rincian tingkat yang lebih rendah bahwa beberapa bahasa (C ++ datang ke pikiran) memaksa ke dalam gambar.

  • Dukungan multi-pemain (atau ketiadaannya) hanya merupakan masalah, jika proyek Anda membutuhkannya.

  • Saya gagal melihat bagaimana "hak milik" adalah penipu. Jika ini adalah proyek sekolah, Anda mungkin tidak ingin menghabiskan waktu meretas sumber kerangka yang Anda gunakan, atau apa pun. Selain itu, DirectX juga eksklusif.

  • Sama sekali tidak ada yang salah dengan menggunakan kerangka kerja tingkat tinggi atau alat-alat seperti Unity. "Membuat game dari awal" adalah sebuah pencapaian - apa yang sebenarnya Anda pertimbangkan "dari awal?" Anda masih akan menggunakan API grafik orang lain. Runtime orang lain (bahkan C membutuhkan pustaka runtime). "Membuat game" adalah apa yang mendapat penghormatan, bukan "membuat game tanpa menggunakan alat yang berguna."

  • C ++ menjadi hal yang "keren" agak subyektif. Bahasa ini sangat sering digunakan oleh para profesional di industri ini, tetapi mungkin bukan karena alasan yang Anda pikirkan. Sebagai bahasa, ia mulai menunjukkan usia dan bisa sangat rumit dibandingkan dengan pilihan yang lebih modern. Bagaimanapun, bahasa hanyalah alat dan pemrogram yang baik harus dapat mengambil yang baru dengan relatif mudah.

Keuntungan besar menggunakan Unity untuk proyek sekolah Anda adalah bahwa itu adalah kerangka kerja tingkat tinggi dengan banyak pekerjaan infrastruktur yang sudah siap untuk Anda - ini akan memungkinkan Anda untuk fokus pada permainan Anda dan bukan membangun fondasi. Anda mungkin memiliki jendela yang relatif terbatas untuk menghasilkan permainan ini sehingga semakin Anda dapat memanfaatkan alat yang ada, semakin banyak waktu Anda harus menghasilkan logika atau aset yang khusus untuk permainan Anda dan akan membuat permainan Anda terlihat dan terasa. lebih lengkap - ada kurva belajar untuk Unity, tetapi Anda berakhir dengan lebih banyak yang Anda inginkan lebih cepat.

Kerugiannya adalah Anda berpotensi menenggelamkan waktu untuk mempelajari alat khusus yang melibatkan pengetahuan yang mungkin tidak dapat ditransfer, terutama jika Anda memutuskan bahwa alur kerja dan lingkungan Unity tidak cocok untuk Anda dan Anda tidak ingin menggunakannya lagi . Juga, Unity tidak memiliki alur kerja 2D yang paling jelas - itu sangat fokus pada game 3D, yang mana semua overhead dalam aset seni yang cenderung terlibat. Tapi saya pikir, untuk proyek sekolah seperti yang Anda gambarkan, Unity adalah pilihan yang cukup bagus.

Josh
sumber
13
saya akan mengutip "Membuat game" adalah apa yang mendapat penghormatan, bukan "membuat game tanpa menggunakan alat yang berguna."
nkint
2
"Sama sekali tidak ada yang salah dengan menggunakan kerangka kerja tingkat tinggi atau alat-alat seperti Unity." Membuat game dari awal "adalah sebuah prestasi - apa yang sebenarnya Anda pertimbangkan" dari awal? "Sama sekali tidak ada yang salah, tetapi datang ke keberatan bahwa orang yang menciptakan teknologi baru akan tingkat serendah mungkin misalnya Uncharted 2 bahkan digunakan sebuah rumah di dimodifikasi API grafis.
concept3d
1
Setiap pengembang yang ingin menjadi yang terdepan dalam grafik komputer harus berfokus pada level terendah dan membuat mesin sendiri dengan gim mereka; tapi sepertinya ini sekitar 1% dari semua pengembang game. Jika sebuah perusahaan membuat game semaju Uncharted 1, pada saat Uncharted 3 keluar, mereka mungkin dapat menggunakan beberapa kerangka kerja yang ada (belum tentu Unity). Pertanyaannya adalah: Apakah Anda membuat Uncharted 4?
Katana314
9

Satu masalah utama dengan Unity adalah kontrol sumber. Jika Anda tidak bekerja dalam tim, ini tidak akan terlalu berarti (bisa dibilang), tapi itu kemungkinan besar tidak akan menjadi masalah.

Anda dapat menggunakan Unity Asset Server, tetapi itu membutuhkan 1) Unity Pro ($ 1500), dan 2) Lisensi Asset Server per kursi ($ 500). Saya berasumsi Anda bisa mendapatkan semacam diskon pendidikan, tetapi itu tidak gratis.

Atau, Anda dapat menggunakan sesuatu seperti SVN dengan Unity. Untuk mendukungnya dengan benar, Anda masih memerlukan Unity Pro.

Anda tidak dapat benar-benar hanya memeriksa versi Un-pro dari Unity ke SVN dan mengharapkannya berfungsi dengan sempurna. Mekanisme mereka untuk mengikat GUID ke aset dan sebagainya tidak aman bagi SCM.


Fungsionalitas multipemain cukup baik, meskipun jujur ​​saja saya belum mengirim game dengannya. Secara teori Anda hanya melampirkan pandangan jaringan untuk hal-hal dan katakan apa yang ingin Anda serialkan untuk mengatur replikasi dengan benar. Dari sana beberapa UI bekerja untuk terhubung ke rekan-rekan lain dan mengatur. Meskipun demikian, sebagian besar peer-to-peer. Anda mungkin dapat melakukan pemrograman klien / server menjalankan kesatuan dalam mode tanpa kepala, tapi saya belum mengacaukannya. Tetapi hanya dengan mengajak orang A berlarian di layar orang B cukup mudah dan cepat untuk dilakukan.

Juga C # adalah positif sejauh yang saya ketahui. LINQ sangat ekspresif. Ini memiliki pengecualian penanganan dan pengumpulan sampah. Ini memiliki paradigma yang jauh lebih modern seperti delegasi, lambdas, antarmuka dan dukungan generik yang lebih baik daripada C ++. ( Sunting : ini jelas kontroversial. Maksud saya adalah bahwa C # bukan bahasa yang buruk . Saya tidak ingin terlibat dalam perdebatan panjang tentang pro dan kontra bahasa vs. C ++.)

Namun, positif terbesar menggunakan Unity, mungkin adalah jalur seni. Anda dapat mengambil file PSD atau Max (dengan asumsi Anda telah menginstal 3ds maks) di folder dan itu akan diimpor.

Tetrad
sumber
3
@DeadMG, ya, sebenarnya sangat baik. Ya saya tahu tentang boost, metaprogramming template, dll. Tetapi saya menemukan C # sebagai bahasa yang lebih modern.
Tetrad
3
@ DeadMG Saya pikir intinya adalah bahwa C # sangat halus untuk banyak kasus penggunaan yang C ++ meninggalkan banyak yang diinginkan. Bukan berarti C ++ tidak dapat melakukan hal-hal itu.
Nate
3
Satu-satunya hal dalam daftar yang mungkin tidak saya setujui adalah 'dukungan generik yang lebih baik daripada C ++'.
Kylotan
1
@Kylotan "for (vektor <vektor <int>> :: iterator iterator = Skor.begin (); iterator! = Skor.end (); iterator ++) {" VS "foreach (var scoreet dalam skor)" .. .yup, saya dengan C #.
Katana314
3
@ Katana314 Tentu saja di C ++ 11: for ( auto x : xs ).
Eric
6

Pembaruan: Unity sekarang menyediakan semua fitur ini bahkan dalam versi gratis, jadi harap abaikan jawaban di bawah ini.


Sesuatu yang patut dicatat - jika Anda menggunakan versi gratis Unity3D Anda tidak akan dapat menggunakan beberapa efek, termasuk shader pasca-pemrosesan (seperti mekar) dan, yang lebih penting, bayangan dinamis. Ini jelas tidak akan banyak berpengaruh pada alur kerja untuk proyek, tetapi mereka menempatkan kendala pada apa yang dapat dicapai secara gratis dengan mesin.

Michael Younkin
sumber
1
Ini tidak lagi akurat dan harus diperbarui atau dihapus.
MichaelHouse
@ Byte56 Terima kasih. Di masa mendatang, Anda harus dapat memperbarui posting lama sendiri tanpa harus meninggalkan komentar.
Michael Younkin
Saya merespons tanda untuk menghapus jawaban ini dan saya tidak menyarankan Anda memperbaruinya untuk mengatakan itu tidak lagi akurat. Saya menyarankan Anda memperbaruinya dengan akurat, atau menghapusnya. Jawaban ini saat ini tidak menjawab pro dan kontra dari Unity 3D sebagai pilihan. Saya yakin Anda bisa mencari cara untuk menyimpannya. (Anda dapat memperbaruinya untuk memasukkan semua fitur yang Unity sekarang menyediakan dan yang tidak gratis).
MichaelHouse
3

Jawaban Nevermind mencakup hal-hal dengan cukup teliti, tetapi hanya untuk mencari di sisi kendali sumber dari berbagai hal, sebenarnya tidak begitu mengerikan ketika Anda belajar untuk mencari beberapa gotchas:

  • Pertama, ya Server Aset mahal, dan cukup mengerikan untuk semua kecuali penggunaan dasar. Manfaat utamanya adalah diintegrasikan ke dalam Unity, dan sementara itu berharga untuk kemudahan penggunaan dan layak untuk proyek yang lebih sederhana, untuk apa pun yang lebih besar (yang biasanya akan menjadi proyek dengan anggaran untuk AS) itu saja tidak cukup fleksibel.
  • Beralih ke kontrol versi eksternal, penting untuk menyadari bahwa File Meta harus diperlakukan seperti aset lain dan selalu ditambahkan ke / diperbarui dalam kontrol versi. Tidak melakukan ini kemungkinan yang terjadi dalam skenario pengaturan Nevermind menghilang.
  • Akhirnya, bekerja dengan sistem kontrol versi apa pun di Unity (termasuk Asset Server), komunikasi tim menjadi penting ketika bekerja dengan aset biner untuk menghindari menginjak pekerjaan masing-masing.

Jika Anda ingin lebih detail tentang poin-poin ini, saya memposting beberapa saat yang lalu tentang penggunaan git dengan Unity berdasarkan pengalaman saya pada beberapa proyek Unity yang cukup besar: http://goo.gl/ivJVR

FlintZA
sumber
Ok, wow, maafkan necropost. Saya baru memperhatikan ini ditanyakan (dan dijawab) pada tahun 2011! Saya menambahkannya karena muncul dalam surat kabar stackexchange gamedev minggu ini .
FlintZA
Tidak ada yang namanya "necro" di SE. Contohnya, komentar saya. : P
Cypher
2

Sebenarnya. Multiplayer didukung. Ini hanya masalah memilih server yang ingin Anda jalankan gim Anda.

Yang paling populer di pasaran sekarang adalah "SmartFox Server" mereka menawarkan beberapa paket berbeda, yang semuanya gratis (sampai batas tertentu). Ini hanya gratis jika Anda berencana memiliki jumlah pemain tertentu, karena setiap paket memungkinkan sejumlah pemain untuk "gratis".

Jika Anda memilih untuk meningkatkan, harganya cukup mahal untuk pengembang indie. Jadi ... Dalam jangka panjang, jika Anda memiliki banyak pemain di server maka Anda harus membebankan biaya untuk permainan daripada mengunggahnya di situs-situs seperti Download.com sebagai permainan lengkap gratis. Ini mungkin bukan masalah bagi sebagian orang, tetapi kebanyakan dari kita tidak mampu membeli $ 2.500 dari kantong untuk server.

Misalnya - SmartFox pro memungkinkan 20 pemain gratis. Jika Anda ingin memutakhirkannya akan dikenakan biaya 500 Euro, yang sedikit lebih banyak di AS, sekitar 600-700, dan itu memungkinkan untuk 100 koneksi.

Pembaruan berikutnya adalah untuk jumlah maksimum 500 pemain, dan itu adalah 1.000 Euro, tapi ... Anda tidak harus membayar 1000, Anda membayar selisihnya.

Jadi, Anda harus membayar hanya 500 Euro lebih banyak, daripada 1000 keseluruhan. Peningkatan terakhir mendukung jumlah koneksi yang tidak terbatas, untuk 2.000 Euro. Yang hampir $ 3.000 AS.

Jadi, jika Anda meningkatkan dari 500 koneksi, Anda membayar 1.000 Euro, jika Anda meng-upgrade dari 100 koneksi Anda membayar 1.5000 Euro, dan tentu saja, 2.000 Euro untuk ditingkatkan dari gratis.

Selain itu, server ini sangat mudah disetel dengan Unity dan ada banyak video tutorial tentang cara melakukannya di Youtube.

Ambo100
sumber
Saya bekerja secara ekstensif dengan SmartFox Server sejak tahun 2005, dan itu sangat berpengaruh. Sangat stabil dan dewasa.
PippoApps.com