Oyun geliştirmeye başlamak için biraz motor kullanmak akıllıca mı? [kapalı]


14

Daha sonra XNA ile oyun geliştirmek için C # programlamaya başladım. C # için iyi bir oyun geliştirme kitabı okudum. Zaten diğer dilleri bildiğim için C # özelliklerini ve sözdizimi kodunu hızlı bir şekilde öğrenebiliyorum. Daha sonra XNA'ya girdim. Okuduğum kitap biraz eski olduğu için bir kenara koydum ve İnternet üzerinden XNA ile ilgili oyun geliştirme derslerine bakmaya başladım. 2D grafikleri kullanarak çoğunu başarabilir ve anlayabilirim. Animasyonlu spritelar oluşturdum, karakterlerimin herhangi bir yönde hareket etmesini sağladım, karakter hareketimle birlikte arka planımı kaydırdım vb. Her şey "ham" XNA ile yapıldı.

Bazı şeyleri anlamakta zorlandım ve bazı şeylerin zaten çerçeve içine yerleştirildiğini buldum. En azından " FlatRedBall " , " Axiom " ve " Quick Start Engine " gibi basit satır kodlarını açıkça anlayabildiğim diğer oyun motorlarını buldum . "OGRE" , "Gerçek dışı" ve "Birlik" gibi ünlüleri zaten biliyordum . Aynı zamanda, hepsini atmak ve bazı ünlü oyun motoru programlamasını öğrenmek için cazip davrandım. Öğrenmem zaman aldığından XNA ile kalmak istedim; zaman kaybetmek istemem.

Bu sefer tecrübeli olanlara bırakıyorum. Oyun geliştirmeye başlasam bile, bir oyun motorundan geçebilir ve sunduklarını kullanabilir miyim? Bazı insanlar çıplak bir çerçevenin sıkıcı rutinlerinden faydalanmanın iyi olduğunu düşünebilirler. Eğer öyleyse, başlamak için önerilen tavsiye ne olurdu? Piyasadan pazara değiştiğini duydum. Belki bir RPG'ye özel istediğimi düşünebiliriz.


1
Aklımda da aynı şey vardı ... XNA'yı 4 yıldır kullanıyorum. Bir MMORPG yapmaya başladım ... Bakın beni nereye götürdü, hayır nereye. Her zaman olduğu gibi, küçük başlayın, daha büyük planlarınız olmadıkça sevdiğiniz bir şey kullanın ve çok fazla zaman geçmeden önce bir şey yapın.
Michael Coleman

@Omnion, bir MMORPG yapmaya çalışırken 4 yıl boyunca XNA kullanmak, kullandığınız şey değil, kararlılık, özveri, serbest zaman ve pratik uygulama meselesidir. Herkes, zaman içinde motivasyonu ve özveriyi koruduğu sürece XNA kullanarak bir MMORPG'yi tamamlayabilir. Süre, boş zaman ve çalışma hızına bağlı olarak değişecektir, ancak projenin büyüklüğü veya kapsamı ne olursa olsun, büyük başlasa bile pratik olabilir. Anahtar mühendislik sürecini organize etmektir. Bebek adımları, her seferinde bir adım, zamanla, ölçek ne olursa olsun, bir projeyi tamamlar.

1
Bunu sadece insanları projelerinin çok büyük olduğuna inanmamaları için değil, bunun yerine pratikliğin gerçekliğini anlamaları için teşvik ediyorum. Eğer bir kişi bir projeyi bitirmenin hayallerinden daha fazlasını gerektirdiğini anlarsa, "hiçbir yere" gitmekten daha fazlasını yaparlar. İnsanları her zaman hayallerini gerçekleştirmeye ve ödün vermemeye teşvik etmek istiyorum. Boyutu ne olursa olsun, sadece başarılabilmesi için pratik yapın. Zamanla her şey mümkündür.

Yanıtlar:


11

Ne öğrenmek istediğinize bağlı. "Sadece bir oyun yaratmak" istiyorsanız, bir motorda iyi olabilirsiniz. Şahsen bunu önermiyorum.

Bilgisayar grafiklerinin nasıl çalıştığını gerçekten anlamak istiyorsanız, daha derine inmeli ve her şeyi öğrenmelisiniz. Doğrusal cebirinizi yenilemekten (en azından matrisler, vektörler ve doğrusal uzaylar) grafik boru hatlarının nasıl çalıştığını anlamaya kadar. XNA, başlamak için en iyi çerçevedir. İlk oyunum buradaydı (yani gerçek oyun, ilk 3B uygulaması openGL'deki muharebe tanklarıydı). 3D programlamaya başlamak istiyorsanız, bu kadar iddialı planlarınız yok, şimdi bir RPG yapamazsınız. Küpleri dolu uzayda uçtuğunuz ve kırmızı olanları vurmaya çalıştığınız, temel bilgileri öğrenmek için bir oyun yapmaya çalışmalısınız. Muhtemelen düşündüğünüzden daha fazla zaman alacaktır :). Ama size çok şey öğretecek.

Ve devam et! 3D grafik programlama, yaşamak için yapabileceğiniz en iyi şeydir. Tek bir pakette zor, eğlenceli ve yaratıcı.


3
XNA yerine MonoGame'i incelemeye değer olabilir . Microsoft, XNA geliştirmeyi durdurdu ve Windows 8 Metro UI desteğinden yoksun. Reddit'te okuduğum bazı yayınlara göre temsilcileri aslında MonoGame'i tavsiye ediyor. Sonuç olarak çapraz platform (Linux, OSX, Android, iOS) elde edersiniz.
David

17

Mevcut bir motoru kullanmanın yanlış bir yanı yok, hepsi hedeflerinize geliyor.

Sadece bazı oyunlar veya oyun tasarımı oluşturmakla ilgileniyorsanız, oyun koduna ne kadar hızlı ulaşırsanız o kadar iyi olur. Birlik gibi bir şey burada harika, çünkü C # bilginizi kullanabilir ve nesnelere komut dosyaları eklemeye başlayabilir ve hemen çalışan bir şey olabilir.

Bir oyun programcısı olmak istiyorsanız, işleri daha düşük bir seviyede anlamalısınız. XNA gibi bir çerçeve iyi bir başlangıç ​​noktasıdır. İşleri başlatmak ve çalıştırmak için çerçeveye güvenebilir ve oyununuzun her bileşenini nasıl oluşturacağınızı öğrenirken çerçevenin bölümlerini kendi kodunuzla değiştirmeye başlayabilirsiniz.


1
Seninkinin benimkinden daha fazla cevap vermesini seviyorum. Sizin için +1.
Notabene

6
Bir oyun programcısı olmak, bir motorla başlamak istiyorsanız ve daha sonra kendi gittiğinizde, iyi bir örnek olarak kullandığınız (onu kullanmaktan zevk aldığınız varsayılarak) bulduğunuz diğer kaynaklarla kontrast oluşturmak istiyorsanız özellikle yararlıdır. motor mimarisi üzerine.
michael.bartnett

Ama yine de, motor kullanıyor olsanız bile, bilgisayar grafik temelleri konusunda sağlam bir kaya olmalısınız.
Notabene

1

AMATÖRDEN TAVSİYE

// Yıllarca Öğrenim Boyunca Sıfırdan Amatörye


Kesinlikle Unity veya Torque2D MIT gibi üst düzey motorlardan uzak dururdum. Küçük prototipler için harikalar, ancak kendi video oyunumu geliştirmek için onları asla ciddiye almam. Neden yapayım? Basit bir SideScroller veya Arcade versiyonundan başka bir şey olmadıkça anlamı nedir?

Çoğu oyun motoru, kitaplık veya çerçeve, asla kullanmayacağınız işlevler ve özelliklerle dolu çok sayıda şişirilmiş kod ile en basit görevlerden başka bir şey yapmaz.


Yıllar önce oyun geliştirmede yeniyken zirveye başladım. Çok yüksek seviyeli motorlar. RPG MAKER gibi çok yüksek bir şey değil, ama kesinlikle Unity ve Torque gibi yüksek. Sonra XNA ve C # 'a indim, çünkü çok fazla kaynak ve öğretici vardı. Birincil projemin performansa ihtiyacı vardı, ya da belki de büyük bir proje olmasa bile yazılımımda inanılmaz bir performans istemeye takıntılı bir kompulsifim var. XNA basitçe kesmedi ve okuduğum motorla ilgili birçok sorunum vardı, düzeltmek için bir baş ağrısı gerekiyordu. Kendi motorunuzu C ++ 'da yuvarlayacağınızla aynı işi yaparken (XNA hatalarını ve sorunlarını giderirken) XNA / C # gibi "daha yüksek seviye" bir şey kullanmanın anlamı nedir?

Bir süre öğrendikten sonra, sonunda oyun motorlarının nasıl tasarlandığını öğrendim ve motorların kodlarını aramaya başladım. Çoğu profesyonellerin söylediklerini ve oyun motorlarının eleştirmenlerinin şikayetlerini okumak, 'Neden bir motor kullanıyorsunuz?'

C ++'ımı fırçalamak ve gerçekten o dilde kullanılan bazı felsefelere girmek bana çok yardımcı oldu. Ancak, bir oyun yapmaya başlamak istediğim kadar çok şey öğrenmek için çok zaman harcadım.

Bu yüzden oldukça övgü dolu bir şeyle sonuçlandım, C ++ ve çok düşük bir seviyeydi: SDL. Ne yazık ki, bu bir baş ağrısıydı. Çok düşük bir seviyedir, bu kütüphaneyi kullanmak için neden hiçbir sebep göremiyorum. Basitçe OpenGL öğrenmeyi ve sıfırdan kendim yapmayı tercih ederim. Dürüst olmak gerekirse, çoğunlukla bir görüntüyü çevirmek gibi temel bir şey yapmak için kendi kodumu uygulamak zorunda kaldım (ve spriteları nasıl ele aldığım nedeniyle başkalarının uygulaması çalışmadı), beni kalıcı olarak SDL'yi çöpe attı. Bir yazılım oluşturucu istiyorsanız harika, ancak IMO, donanım (OpenGL) veya daha yüksek (SFML) ile daha aşağı inmesini tercih ederim.

Amazon'da başka bir kitap satın almak ve başka bir API öğrenmek istemediğim için daha yükseğe çıktım. SFML sadece harika, tüm internette övgü bahsetmiyorum bile. Hiçbir olumsuz yanında neredeyse sonsuz sayıda olumlu eleştiriler okudum. SDL için aynısını söyleyemem. Tüm aşırı temelleri ele alır, ancak gerisini bana ve seçtiğim diğer kütüphanelere bırakır. O zamandan beri ona takılı kaldım.


IMO, bir oyun motoru sadece aptalca. Düşük seviyeli kütüphaneler hem uzman hem de yeni başlayan programcılar için çok daha iyi seçimlerdir.

Ayrıca, kavramları programlama hakkında daha fazla bilgi edindim ve yüksek seviye WYSIWYG oyun motorlarıyla öğrendiğimden daha düşük bir seviyede şeyleri işlemek zorunda kaldığımda yazılım geliştirme becerilerimi keskinleştirdim.

Unity gibi bir şey size XNA üzerinden ne verir? Görsel düzenleme ve koltuk değneği. Yeni başlayanlar nihayetinde, tıpkı çıplak C ++ 'a sahip olduğunuz gibi, neredeyse tüm oyunu kodlamanız gerekeceğini öğrenecek ve görsel editörler kendiniz oluşturabileceğiniz bir şey için verimsiz olacaktır.

XNA gibi bir şey size SFML üzerinden veya kendi OpenGL ve diğer faydalı kütüphanelerin uygulanmasında neler verir? IMO, absolutley iyi bir şey değil. Daha kötü performans, C ++ yerine C #, acemi öğreticilerin bolluğu ancak önemli ölçüde daha az profesyonellik ve IMO'nun sadece C ++ ile öğrenmeniz gereken şey için bir koltuk değneği olduğu bazı baş ağrısı koruyucular. Başlangıçta C ++ ile korkutuldum ve C #'ı sevdim, çoğunlukla duyduğum ve başlangıçta C ++ ile yaşadığım sorunları olan aptalların görüşlerine dair söylentiler nedeniyle: Sadece yeterince iyi bir programcı istedim. C # 'ın kolaylaştığı C ++ ile yaşadığım sıkıntıların üstesinden gelmek için daha fazla temel bilgi edinmem ve zayıflıklarımı keskinleştirmem gerektiğini fark ettim. Hiç C # bazı şeylerin basitliğini özledim mi? Hatta değil! Nasıl bir C ++ sorunsuz çalışacağımı biliyorum.


Düşük seviyeli kütüphaneler veya DirectX / OpenGL öğrenmek sizi korkutuyorsa, tam bir video oyunu yaratmanın karmaşıklığına girmeye başlayıncaya kadar bekleyin.

Oyun motorları hakkındaki felsefem, izole koşullar dışında motorların artıklığını ve yararsızlığını açıklayan iki örnekle özetlenebilir.

Düşük seviyeli kütüphanelerle korkutulmuş yeni başlayanlar, Unity gibi yüksek seviyeli bir motorla bile (grafik oluşturma, ses çalma, içerik yükleme; gerçek temel şeyler) bir oyun yapmakla neredeyse aynı olacağını keşfettiklerinde bir nöbet geçirecekler. sıfırdan. Karmaşıklık, bir oyunu tasarlamada, API'yi anlamada veya ekrana dönüştürmek için sınıfları geliştirmede değildir.

Unity gibi bir şeyde tam bir oyun yaratmanın karmaşıklığından korkmayan uzmanlar, Unity için hiçbir işe yaramazlar, çünkü belirli bir motorun API'sını ve gereksinimlerini güvenle öğrenmek için geçen süre muhtemelen daha fazla baş ağrısıdır ve Temelleri yapmak için gereken birkaç sınıfı kodlamak için gereken süreden daha uzun.

Bu yüzden motorlar yeni başlayanlar için işe yaramaz, çünkü yeni başlayanlar onlarla hiçbir şey yapamazlar çünkü mühendislik becerilerinden yoksundurlar. Benzer şekilde, motorlar gaziler için işe yaramaz, çünkü zaten bir motor olmadan bunu yapmak için mühendislik becerilerine sahipler ve hem oyun motorunun API'sını öğrenmenin baş ağrısından geçmek yerine kendi daha verimli, özel 'motorlarını' yuvarlayabilirler, işlevleri ve performans tuhaflıkları. Açık kaynak olmadıkları için bazen dokunamayacağınız motorlarla çalışmanın muazzam kabusundan bahsetmiyorum (ya da öyle olsalar bile, başkalarının kodunu okumak bazen bir kabus olabilir).

Heck, hatta bazı "düşük seviyeli" "oyun çerçeveleri", bir pencere oluşturmak, ekrana render etmek ve ses çalmak için birkaç sınıftan başka bir şey değildir. Bu, bir profesyonelin SDL / SFML gibi diğer kütüphaneleri veya kendi OpenGL / DirectX / OpenAL uygulamasını kullanarak sıfırdan yapabileceği bir şeydir, tam bir video oyununu tamamlamak için gereken sürenin bir kısmında.


TLDR;

  1. Programlamak istiyorsanız, programcı olmayı öğrenin .

  2. Motor kullanmaktan kaçının , ama aptal olmayın ve inanılmaz derecede faydalı kütüphaneleri görmezden gelin.

  3. Oyun Tasarımcısı olmak istiyorsanız , bir WYSIWYG motoru deneyin ve bu oyunları dışarı pompalayın!

  4. Bir Oyun Programcısı olmak istiyorsanız , koltuk değneği gibi motorlardan kaçının.

  5. Benim için , daha üst düzey oyun motorları kullanmak programcı olma yeteneğimi sakat bıraktı. Bunun yerine daha düşük seviyeli kütüphaneleri kullanmaya başladığım ya da hiç kütüphane kullanmadım, o kadar çok şey öğrenmeye başladım ki, hemen hemen yeni bir acemi, şimdi yanımda herhangi bir referans, öğretici veya kitap olmadan video oyunları oluşturabilen birine geçtim. Sadece derleyicim ve bir sürü mühendislik ve uygulama.

KISA bir zaman diliminde düşük seviyeli kütüphanelerden kazandığım öğrenme miktarı, yüksek seviyeli MOTORLAR ile ÇOK UZUN bir sürede kazandığım miktardan çok daha fazlaydı. **


2
Feragatname: Bu sadece benim hikayem ve öğrenme tarzım. Diğer insanlar farklı olabilir. Bir Oyun TASARIMCISI (motorlara bağımlı) yerine Oyun PROGRAMCISI (düşük seviye şeyler) olmaya çalıştığımda öğrenme süreci için sadece bir dünya vardı.
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.