kinglord34

Aktif üye
7 Ocak 2017
261
30
28
Belirtilmemiş
Arkadaşlar selamlar, 
Unreal Engine üzerinde daha güzel işler çıkarmak için C++ öğrenmeye karar verdim fakat nasıl bir yol izleyeceğimi bilmiyorum. Nesne tabanlı c++ dersleri izleyerek mi kendimi geliştireyim yoksa unreal engine 4 c++ dersleri mi? Hangi yolu izlemem benim için daha sağlıklı olur?

Önerilerinizi bekliyorum.
 
Merhaba kolay gelsin. Anlamadığım bir nokta var. C++ bilmediğin için daha güzel işler çıkaramadığını mı düşünüyorsun? C++ ile yapıp blueprint ile yapamayacağın pek bir şey yok çünkü. Bana sorarsan oyunda yaptığın her sistem ve aktör sınıfı için bir c++ parent sınıfı oluşturup ondan blueprint child oluşturup oyunun prototipini blueprint üzerinde yapıp bitirmen olur. En sonda da eğer game thread süresi draw thread ve GPU süresini geçiyorsa bazı noktalar, o noktalarda kullandığın fonksiyonları veya sistemleri c++ olan parent sınıfına aktarmak olur. Eğer C++'a veya yazılıma yeni başlıyorsan en kısa sürede böyle bitirebilirsin oyunu. Ama unity den geliyorsan ona bir şey diyemem.

Ve eğer yapabiliyorsan nesne tabanlı yerine data oriented tasarımı tercih edebilirsin. Çok fazla kaynak yok bu konuda ama kısaca oyunun mümkün olan her alanını datatable ve tak/çıkar tarzı mekaniklerle yapıyorsun. Bu tip oyun tasarımı modlamaya ve yeni içerikler getirip var olan içerikleri çıkarmaya açık hale getiriyor. Oyuna güncelleme getirmek çok kolay oluyor çünkü var olan sistemleri değiştirmen gerekmiyor çoğu zaman.

Örnek olarak fortnite bu oyun tasarımını kullanıyor. O yüzden çok sık ve hızlı yeni eventler, etkinlikler ve içerikler getirip var olanları çıkarabiliyorlar.
 
Bu oyun tasarımı modelini ben çok iyi uyarladığımı düşünüyorum. Yaptığım her sistemi alıp başka bir oyunda kullanamayacaksam, yapamamışım demektir deyip baştan tasarlıyorum. Diğer türlü, hiçbir şekilde c++ gereksinimi duymadım şu ana kadar. Bir keresinde hem c++ hem blueprintte saniyede 200 mermi oluşturan bir kod yazmıştım. Çok bir fark yoktu. Zaten saniyede 200 merminin gerektirdiği bir mekanik oluşturmayacağım için, üzerinde çok durmadım. Bana kalırsa soruyu soran arkadaş, daha ileriye gitmenin yollarını programlama aracını değiştirerek değil, programlama mantığını değiştirerek arasın. Canerin de dediği gibi modüler programlama mantığını kavrasın.
 
Aslında haklısınız kendimi tam ifade edememişim bunun için özür diliyorum. Blueprint üzerinden de istediğimiz her şeyi yapabiliyoruz fakat performans sorunu ve görsel kod olmasından dolayı c++'a geçmek istiyorum. Önerileriniz için de ayrıca teşekkür ederim. 

Udemy platformundan bildiğiniz ya da tavsiye edeceğiniz C++ Türkçe kurs varsa benimle paylaşırsanız sevinirim. İyi çalışmalar.
 
Bu senin amacınla ilgili. Eğer profesyonel firmalarda game programmer olarak çalışmak istiyorsan C++ bilmeden giremezsin. Eğer girebiliyorsan firma profesyonel değildir. Eğer 3 4 ten fazla programcı ile çalışmak istiyorsan yani oyunda yalnız değilsen yine C++ öğrenmen gerekir. Eğer proje kapsamı büyük olan bir oyun üzerinde çalışmak istiyorsan bu durumda da C++ öğrensen iyi olur. Son olarak programlama sistemlerini ve mantığını işlevsel olarak kavramak istiyorsan yine C++ öğrensen iyi olur. Bu durumların aksi durumlar söz konusu ise öncelikle Unity daha güzel bir çözüm olacaktır. Şunları iyi anlamak gerekir. Unreal yapısı itibari ile "Big Boy" dediğimiz büyük geliştiriciler için dizayn edilmiştir. BP bir programlama dili değildir. Bir görsel "scripting" aracıdır. BP level designer ve game designerların kodlamaya ihtiyaç duymadan basit şeyleri, ya da üst seviye dizayn seçeneklerini uygulamaları için yazılmışlardır. Çok gelişmiş olduğu için basit ve orta düzeyde durumu kurtarman da mümkündür. Ancak BP scripting i uzman seviyesinde öğrenirsen AAA kalitesinde olmayan oyunları geliştirebilirsin. Ancak yine programlama mantığı konusunda yetişmiş olmazsın. Bu arada Fortnite gibi oyunlar çok ağır şekilde C++ kullanırlar (tamamen GAS sisteminde yapılmış bir oyundur). Aslında C++ kullanılmayan AAA ya da AA bir oyun ben hiç duymadım. Yani sonuç ta bu konu senin hayattaki beklentin amaçların ile ilgili bir konu.
 Asıl soruna gelecek olursak. Bir çok kişiye yıllardır mentörlük ve öğretmenlik yapmaya çalışmış biri olarak benim tavsiyelerim şöyle: 
   1. Eğer profesyonel olarak bu işi yapma niyetin yoksa hiç başlama.
   2. Önce C den başla adım adım git. Asla direk C++ öğreneyim ya da Unreal ile beraber öğreneyim diye düşünme. Önce C sonra C++ öğren. En son Unreal ile C++ öğren. C yazmadan C++, C++ yazmadan Unreal C++ yazmaya çalışma
   3. Tutorial veya derslerden önce mutlaka kitap al. 3 4 ten fazla kitap oku. Video ders vb şeyleri destekleyici unsur olarak kullan. Kitapta anlayamadığın şeyleri anlamak için. Asla sadece videolar ile gitme.
   4. Kendi kendine projeler yap ufak ta olsa. Assetler hiç önemli değil ama tarzlar farklı farklı olsun. Neredeyse herşey BP de de yapılabildiğinden kendine kural koy. Sırf öğrenmek için bu C++ ta nasıl yapılır deyip C++ ta yazmaya çalış.
   5. Ayırdığın vakte göre 1 ila 2 yıl bunu öğrenmek için vaktini planla
   6. Eğer tüm bunları yaptıysan ve belli bir seviyeye geldiysen, daha fazla beklemeden bir şirkete gir. Şirkette öğrenme hızın kendi öğrenme hızının 3 4 katı olacaktır. Eğer yapabilirsen 2 ya da 3 firmaya gir. Eğer tek firmaya giriyorsan mutlaka kendi yan projen olsun. Asla tek bir projede çalışma.
   7. Sürekli öğrenme döngüsüne girme (Buna tutorial döngüsü de diyorlar). Her şeyi bilemeyeceğinin farkında ol. Bazı insanlarda mükemmeliyetçilik var ve her şeyi öğrenmek zorunda olduklarını düşünüyorlar. Bu düşünceyi söküp atmak gerekir. Önemli olan "ihtiyacım olduğunda max 1 haftada öğrenirim" seviyesine gelmektir. Her şeyi biliyor olmak mümkün değildir.

Sağlıcakla kal
 
erginegider' Alıntı:
Bu senin amacınla ilgili. Eğer profesyonel firmalarda game programmer olarak çalışmak istiyorsan C++ bilmeden giremezsin. Eğer girebiliyorsan firma profesyonel değildir. Eğer 3 4 ten fazla programcı ile çalışmak istiyorsan yani oyunda yalnız değilsen yine C++ öğrenmen gerekir. Eğer proje kapsamı büyük olan bir oyun üzerinde çalışmak istiyorsan bu durumda da C++ öğrensen iyi olur. Son olarak programlama sistemlerini ve mantığını işlevsel olarak kavramak istiyorsan yine C++ öğrensen iyi olur. Bu durumların aksi durumlar söz konusu ise öncelikle Unity daha güzel bir çözüm olacaktır. Şunları iyi anlamak gerekir. Unreal yapısı itibari ile "Big Boy" dediğimiz büyük geliştiriciler için dizayn edilmiştir. BP bir programlama dili değildir. Bir görsel "scripting" aracıdır. BP level designer ve game designerların kodlamaya ihtiyaç duymadan basit şeyleri, ya da üst seviye dizayn seçeneklerini uygulamaları için yazılmışlardır. Çok gelişmiş olduğu için basit ve orta düzeyde durumu kurtarman da mümkündür. Ancak BP scripting i uzman seviyesinde öğrenirsen AAA kalitesinde olmayan oyunları geliştirebilirsin. Ancak yine programlama mantığı konusunda yetişmiş olmazsın. Bu arada Fortnite gibi oyunlar çok ağır şekilde C++ kullanırlar (tamamen GAS sisteminde yapılmış bir oyundur). Aslında C++ kullanılmayan AAA ya da AA bir oyun ben hiç duymadım. Yani sonuç ta bu konu senin hayattaki beklentin amaçların ile ilgili bir konu.
 Asıl soruna gelecek olursak. Bir çok kişiye yıllardır mentörlük ve öğretmenlik yapmaya çalışmış biri olarak benim tavsiyelerim şöyle: 
   1. Eğer profesyonel olarak bu işi yapma niyetin yoksa hiç başlama.
   2. Önce C den başla adım adım git. Asla direk C++ öğreneyim ya da Unreal ile beraber öğreneyim diye düşünme. Önce C sonra C++ öğren. En son Unreal ile C++ öğren. C yazmadan C++, C++ yazmadan Unreal C++ yazmaya çalışma
   3. Tutorial veya derslerden önce mutlaka kitap al. 3 4 ten fazla kitap oku. Video ders vb şeyleri destekleyici unsur olarak kullan. Kitapta anlayamadığın şeyleri anlamak için. Asla sadece videolar ile gitme.
   4. Kendi kendine projeler yap ufak ta olsa. Assetler hiç önemli değil ama tarzlar farklı farklı olsun. Neredeyse herşey BP de de yapılabildiğinden kendine kural koy. Sırf öğrenmek için bu C++ ta nasıl yapılır deyip C++ ta yazmaya çalış.
   5. Ayırdığın vakte göre 1 ila 2 yıl bunu öğrenmek için vaktini planla
   6. Eğer tüm bunları yaptıysan ve belli bir seviyeye geldiysen, daha fazla beklemeden bir şirkete gir. Şirkette öğrenme hızın kendi öğrenme hızının 3 4 katı olacaktır. Eğer yapabilirsen 2 ya da 3 firmaya gir. Eğer tek firmaya giriyorsan mutlaka kendi yan projen olsun. Asla tek bir projede çalışma.
   7. Sürekli öğrenme döngüsüne girme (Buna tutorial döngüsü de diyorlar). Her şeyi bilemeyeceğinin farkında ol. Bazı insanlarda mükemmeliyetçilik var ve her şeyi öğrenmek zorunda olduklarını düşünüyorlar. Bu düşünceyi söküp atmak gerekir. Önemli olan "ihtiyacım olduğunda max 1 haftada öğrenirim" seviyesine gelmektir. Her şeyi biliyor olmak mümkün değildir.

Sağlıcakla kal


Gerçekten bu tavsiyelerin için çok teşekkür ediyorum. Zaten senin de dediğin gibi bu işte profosyonel olmak için bu dile başlayacağım.
Fakat izninle bir sorum olacak. C dilini öğrenmeme gerçekten gerek var mı? Çünkü üniversite, dersler, diğer projeler derken kısıtlı bir zaman dilimine sahibim. Ayrıca orta düzey c# bilgisine sahibim ve algoritmam da fena sayılmaz. Ama eğer diyorsan ki C++ öğrenmek istiyorsan kesinlikle C dilini öğrenmen gerekiyor; bu durumda benim üzerime düşen tek şey, ustanın vardır bir bildiği.

Ek olarak yanlış bilmiyorsam PUBG'nin ilk yayınlandığı sürüm tamamiyle blueprint üzerinden yapıldı fakat çok fazla performans sorunu olduğu için blueprint kodları c++'a çevirdiler diye biliyorum.
 
kinglord34' Alıntı:
erginegider' Alıntı:
Bu senin amacınla ilgili. Eğer profesyonel firmalarda game programmer olarak çalışmak istiyorsan C++ bilmeden giremezsin. Eğer girebiliyorsan firma profesyonel değildir. Eğer 3 4 ten fazla programcı ile çalışmak istiyorsan yani oyunda yalnız değilsen yine C++ öğrenmen gerekir. Eğer proje kapsamı büyük olan bir oyun üzerinde çalışmak istiyorsan bu durumda da C++ öğrensen iyi olur. Son olarak programlama sistemlerini ve mantığını işlevsel olarak kavramak istiyorsan yine C++ öğrensen iyi olur. Bu durumların aksi durumlar söz konusu ise öncelikle Unity daha güzel bir çözüm olacaktır. Şunları iyi anlamak gerekir. Unreal yapısı itibari ile "Big Boy" dediğimiz büyük geliştiriciler için dizayn edilmiştir. BP bir programlama dili değildir. Bir görsel "scripting" aracıdır. BP level designer ve game designerların kodlamaya ihtiyaç duymadan basit şeyleri, ya da üst seviye dizayn seçeneklerini uygulamaları için yazılmışlardır. Çok gelişmiş olduğu için basit ve orta düzeyde durumu kurtarman da mümkündür. Ancak BP scripting i uzman seviyesinde öğrenirsen AAA kalitesinde olmayan oyunları geliştirebilirsin. Ancak yine programlama mantığı konusunda yetişmiş olmazsın. Bu arada Fortnite gibi oyunlar çok ağır şekilde C++ kullanırlar (tamamen GAS sisteminde yapılmış bir oyundur). Aslında C++ kullanılmayan AAA ya da AA bir oyun ben hiç duymadım. Yani sonuç ta bu konu senin hayattaki beklentin amaçların ile ilgili bir konu.
 Asıl soruna gelecek olursak. Bir çok kişiye yıllardır mentörlük ve öğretmenlik yapmaya çalışmış biri olarak benim tavsiyelerim şöyle: 
   1. Eğer profesyonel olarak bu işi yapma niyetin yoksa hiç başlama.
   2. Önce C den başla adım adım git. Asla direk C++ öğreneyim ya da Unreal ile beraber öğreneyim diye düşünme. Önce C sonra C++ öğren. En son Unreal ile C++ öğren. C yazmadan C++, C++ yazmadan Unreal C++ yazmaya çalışma
   3. Tutorial veya derslerden önce mutlaka kitap al. 3 4 ten fazla kitap oku. Video ders vb şeyleri destekleyici unsur olarak kullan. Kitapta anlayamadığın şeyleri anlamak için. Asla sadece videolar ile gitme.
   4. Kendi kendine projeler yap ufak ta olsa. Assetler hiç önemli değil ama tarzlar farklı farklı olsun. Neredeyse herşey BP de de yapılabildiğinden kendine kural koy. Sırf öğrenmek için bu C++ ta nasıl yapılır deyip C++ ta yazmaya çalış.
   5. Ayırdığın vakte göre 1 ila 2 yıl bunu öğrenmek için vaktini planla
   6. Eğer tüm bunları yaptıysan ve belli bir seviyeye geldiysen, daha fazla beklemeden bir şirkete gir. Şirkette öğrenme hızın kendi öğrenme hızının 3 4 katı olacaktır. Eğer yapabilirsen 2 ya da 3 firmaya gir. Eğer tek firmaya giriyorsan mutlaka kendi yan projen olsun. Asla tek bir projede çalışma.
   7. Sürekli öğrenme döngüsüne girme (Buna tutorial döngüsü de diyorlar). Her şeyi bilemeyeceğinin farkında ol. Bazı insanlarda mükemmeliyetçilik var ve her şeyi öğrenmek zorunda olduklarını düşünüyorlar. Bu düşünceyi söküp atmak gerekir. Önemli olan "ihtiyacım olduğunda max 1 haftada öğrenirim" seviyesine gelmektir. Her şeyi biliyor olmak mümkün değildir.

Sağlıcakla kal


Gerçekten bu tavsiyelerin için çok teşekkür ediyorum. Zaten senin de dediğin gibi bu işte profosyonel olmak için bu dile başlayacağım.
Fakat izninle bir sorum olacak. C dilini öğrenmeme gerçekten gerek var mı? Çünkü üniversite, dersler, diğer projeler derken kısıtlı bir zaman dilimine sahibim. Ayrıca orta düzey c# bilgisine sahibim ve algoritmam da fena sayılmaz. Ama eğer diyorsan ki C++ öğrenmek istiyorsan kesinlikle C dilini öğrenmen gerekiyor; bu durumda benim üzerime düşen tek şey, ustanın vardır bir bildiği.

Ek olarak yanlış bilmiyorsam PUBG'nin ilk yayınlandığı sürüm tamamiyle blueprint üzerinden yapıldı fakat çok fazla performans sorunu olduğu için blueprint kodları c++'a çevirdiler diye biliyorum.

Öncelikle hayatımda tamamen BP de yapılmış profesyonel oyun hiç duymadım. Eğer yapmışlarsa fantezi olsun diye yapmışlardır. Eğer Epic yapmışsa pazarlama stratejisi olarak yapmıştır. BP ile PubG seviyesinde bir oyunun yapılacağına da inanmıyorum.
Eğer profesyonel olarak bu alanda çalışmak istiyorsan C++ öğrenmek zorundasın. Eğer C# bilgin varsa her şey senin için çok daha kolay olacaktır. Ama benim tecrübelerim yukarıda anlattığım gibi sırası ile adım adım gitmek gerektiğini gösteriyor. Aksini yapanların çok daha uzun zaman harcadıklarını her şeyi birbirine karıştırdıklarını görüyorum.
C++ ve C ilişkisini anlarsan öğrenip öğrenmemen gerektiğine kendin karar verebilirsin. C++ dediğimiz şeyin ilk çıktığında ki ismi "C with Classes" yani "sınıflı C". Sonradan C++ diyorlar ismine. Yani C++ C yi zaten içeriyor. Dolayısı ile sen adına ben C öğrenmiyorum C++ öğreniyorum desende öğrendiğin şeylerin yarısı C olacak yine zaten. Ben C de kullanılıp ta benim şu an kullanmadığım ya da en azından faydalı bulmadığım tek bir şey yok. "Bunu C de öğrenmiştim ama hiç kullanmıyorum hiç gerek olmuyor" dediğim 1 2 ufak şey dışında neredeyse hiç bir konu yok. Ama tersi var. "Sadece C kitaplarında anlatılan şu şeyi okumamış olsaydım bunu anlamam çok çok zor olurdu" dediğim her gün bir şeylerle karşılaşıyorum. 
Yani kısaca sen adına ne dersen de. Bu işi profesyonel olarak yapacaksan C++ bilmen gerekiyor. C ise C++ ın neredeyse yarısını oluşturuyor. Öyle ya da böyle kullanmak zorunda kalacaksın. Dolayısı ile adım adım temeli iyi kurarak gidersen daha güzel ilerlersin kanaatindeyim.
Bunlar benim tecrübelerim. Almak almamak senin bileceğin bir şey.
 
erginegider söylediği bir şeyde çok haklı. Amacın maaşlı olarak şirketlerde çalışmaksa söylediklerini izlemen çok gerekli. Bir ekiple çalışıp oyun yapacaksan da önemli. 


Ama tek başına oyun yapmayı hayal ediyorsan üretim süresini ciddi olarak düşürebilmen gerekli. 3 yıl bir oyun üstünde çalışmak istemezsin. O kadar uzun süre oyunu geliştirme hevesini yukarıda tutamazsın. Bu yüzden mümkün olan en az üretim süresiyle oyunu nasıl bitirebilirsin onu kendin öğrenmen gerek. Solo oyun geliştiricisysen zaten PUBG, fornite gibi oyunlar yapmaya kalkışmazsın. Onlar farklı boyutlar. Daha indie tarzında simulasyon ve strateji oyunlarına yönelirsin. 



Ben kendimi hiçbir zaman profesyonel olarak görmedim. Hiç bir şirkette çalışmayı da düşünmedim. Tek hayalim kendi oyunlarımı yapmaktı ve sabırsız biriydim. 31 yaşımda unreal engine öğrenmeye başladım. 6 ay sonrasında ilk ciddi oyunumu yapmaya başladım (ondan önce 3 projeyi 1-2 ay öğrenme amacıyla başlayıp çöpe attım). Ciddi projeme başladıktan 8 ay sonra Steam üzerinden yayınladım. Oyun New Home Medieval Village. Ve oyun %100 blueprint ile yapıldı çıktığı anda. Oyunda GPU bottleneck vardı yani CPU ya da Draw hiçbir zaman sorun olmadı. Sadece köylü sayısı 100 ile sınırlıydı. Onu 1000 e çıkarmak için C++ a ilk defa başvurdum. Çünkü orjinal CharacterMovementComponent gereğinden fazla kompleks hesaplamalar yapıyordu. Bende kendi movement komponentimi c++ ile yaptım. Şu an oyunda 750-800 köylüye kadar CPU kaynaklı performans kaybı olmuyor. Oyunda C++ olan tek şey köylü yürüme komponenti.



Şimdi bu benim ilk oyunum, yetersiz içerikle çıkardım. 8 ay solo geliştirici için çok kısa içerik çeşitliliği için. Ama sonuç? ilk oyunumu çıkardım. 14 ocaktan bu yana 150 bin dolar brüt, 70 bin dolar net para kazandırdı. Hayatım herhalde bundan daha hızlı değişemezdi. 



Yani uzun lafın kısası amaçladığın şey ne? Profesyonel bir geliştirici olup yurtdışı standartlarında bir maaşla şirkette çalışmaksa ergin hocamın dediklerini izle. Eğer daha riskli, zor  ve fedakarlık gerektiren bir yol izleyip solo geliştirici olarak para kazanmaksa o zaman mükemmelliyetçiliği bırakıp sadece bir ürünü ortaya çıkartabilmeye odaklanmalısın. İkinci yolda doğru yol diye bir şey yok. Vakitten, ekstra efordan ve harcayacağın para ve emekten kar ettiren hangi imkan varsa onları kullanman gerek.



Şu an ikinci oyunumu yapıyorum. Artık kenarda param ve üretim için uzun bir süre toleransım olduğu için oyunu %85 c++ ile yapıyorum. Şu oyun yapabildiğin oyunlardaki gibi mekanikleri tak çıkar olacak şekilde c++ ile kodluyorum. Bundan sonraki oyunlarımda kodlama yapmama gerek kalmamasını hedefliyorum. Böylece vaktimin büyük çoğunluğunda oyunun görsellerine ve detaylarına odaklanabileceğim.



Bu süreçte bana da 3 tane şirketten iş teklifi geldi ben başvurmama rağmen. Belki bu oyundan kazandığımdan fazlasını teklif edeceklerdi aylık ortalama olarak ama onlara cevabım ekip ile çalışabilecek yetkinliğe sahip olmadığım için reddettim. Başkalarının işini yavaşlatmak istemem çünkü sadece kendi işime yarayacak taraflarda geliştirdim kendimi :)