dvl

Yeni üye
4 Ocak 2016
102
1
0
29
(35) İzmir
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela

   GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);

böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?
 
dvl' Alıntı:
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela

   GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);

böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?

Unreal içinse EventTick olabilir herhalde
 
leonscottkfm' Alıntı:
dvl' Alıntı:
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela


böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?

Unreal içinse EventTick olabilir herhalde

Anlamadım ?
 
dvl' Alıntı:
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela

   GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);

böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?

Soru1: 

C++ programlamayı öğrenmek için öncelikle basit olarak programlamanın genel mantığını öğrenmelisiniz. Çünkü kendine has bazı şablonları ve işaretçileri taşır. Dökümantasyonlardaki örnekler daha önceden oyun programlaması ile uğraşmış herhangi bir kişi için iyi bir örnektir. Eğer C++ dilinde kendinizi uygun hissetmiyorsanız Unreal Engine 4 ile uğraşmak mantıklı değil. 

C++ öğrenmek için yazılı kaynaklar:

http://www.learncpp.com/   (bu siteyi özellikle öneriyorum)
https://www.sololearn.com/Course/CPlusPlus/ (daha interaktif. buradaki her şeyi bitirmeniz temel şeyleri öğrenmek için yeterli olacaktır.)

Temel eğitimleri öğrendikten sonra:
SDL veya SFML grafik kütüphaneleri için 2D bazlı oyunlar yaparak oyun programlama yeteneklerinizi geliştirebilirsiniz. Bu kütüphaneler klavye giriş çıkışı, ağ, ses ve grafik çizdirmek için hazırlanmış kütüphanedir. Bunlar ile ilgilenmek yapılan bir oyunun genel mantığı için uygun olacaktır. 

Eğer renderlemek sizi ilgilendiriyor daha matematiksel ve geometrik işlemlerde kullanıp daha derinle girmek istiyorsanız OpenGL ya da Vulkan gibi kütüphaneleri kullanarak bir oyun yapabilirsiniz.

Unreal Engine 4 ile programlamayı internet üzerinden öğrenebileceğiniz kaynaklar (bunun dışında bende bir pdf kitap var sana atabilirim)
https://www.udemy.com/
http://www.tomlooman.com/category/unreal-engine-4/cpp/ 
http://orfeasel.com/blog/

Bunun dışında Unreal Slackers Discord topluluğuna katılıp C++ programlama kanalına katılabilirsiniz.  http://unrealslackers.org/

Soru2:

Unreal Engine için sınıflara baktığınız zaman bir çok farklı şekilde tanımlama görürsünüz. UObject sınıfı tüm sınıfların başında gelir. Diğer sınıflar bu sınıftan türemiştir. https://docs.unrealengine.com/latest/INT/API/Runtime/CoreUObject/UObject/UObject/index.html

UObjectin bir alt sınıfı olan AActor sınıfına bakın.
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/GameFramework/AActor/index.html

Bahsettiğiniz GetWorldTimerManager fonksiyonu bir AActor sınıfının metodu.
https://docs.unrealengine.com/lates...mework/AActor/GetWorldTimerManager/index.html

281bcb29f96b4500857cf70075da558f.png


Gördüğünüz üzere bir aktör sınıfının mesela
AActor* benimAktorum;
benimAktorum->zamanlayiciAlmaMetodu() zamanlayıcısını al. vs... gibi şeyleri kullanabilirsiniz.

Burada -> ile işaretçi olan bir metoda erişmek için kullanıyoruz. Peki FTimerManager nedir? O da bir sınıftır. Bu sınıf ile oyun dünyasındaki ya da aktördeki bir sınıfa eriştiğiniz zaman size geri döner mesela
GetWorld()->GetTimerManager diyelim. burada dönen bir FTimerManagerin örneğidir. CountdownTimerHandle dediğiniz parametreyi tutar.


Bundan sonra setTimer metoduna bakalım.
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/FTimerManager/SetTimer/4/index.html
 
GetWorld()->GetTimerManager().SetTimer(parametreler...) gördüğünüz gibi aslında her şey sınıfların birbirinden aldıkları örnekler sonucunda çıkan bir veri tipidir. Bu bir sınıf veri tipi olabilir ya da saf bir tamsayı veri tipi olabilir.

UObjectin bir alt sınıfı olan UWorld bakın. UObjectten türemiş olan bir sınıf. Ve içinde bazı Timer metodları var. Oyun dünyasının genel olarak soyutlanan bir sınıf örneğidir
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/index.html

Eğer oyun dünyasında zamanı tutacaksanız buna göre bir timer oluşturmanız gereklidir. Bu TimerHandle sınıfı gerçek çalışma zamanlı olacağı için oyun motorunun içinde tanımlanmıştır. O yüzden AActor sınıfından türemiş.. Fakat aktörün içindeyse, örnekteki metodu kullanmanız gereklidir.

Son olarak eğer aradığınız kodun bir örneğini bulamadıysanız yapılan template projelerin içerisinde ya da actor.h gibi ana başlık dosyasına gidip oradaki bazı fonksiyonları deşebilirsiniz. Yararlı olacak bazı şeyler bulacaksınız. Unreal Slackers'da ue4-programming kanalında bu tip sorarsanız daha çabuk yanıt verecek bir çok yardımsever insan tanıyorum.
 
dvl' Alıntı:
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela

   GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);

böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?

https://docs.unrealengine.com/lates...mework/AActor/GetWorldTimerManager/index.html

Unreal Engine ile ilgili bu ve benzeri sınıfları, fonksiyonlar...vb öğrenmek için yine Unreal Engine Programlama(Özel Olarak C++) Dökümantasyonunu incelemelisiniz.

https://docs.unrealengine.com/latest/INT/Programming/index.html

Bu başlık altında API Reference tam da aradığınız şey, ancak; sadece kısa bilgiler verir. Detaylı bir anlatım yada örneği API Reference altında bulamazsınız. Aradığınız herhangi bir fonksiyon, sınıf...vb için programlama dökümantasyonu ana sayfasında sağ üstte Search Documentation bölümünde arama yaptırırsanız, ilgili bütün kaynaklara (dökümantasyon, wiki, answerhub, forum...vb) erişebilirsiniz. Epic'e ait yerler dışında pek aradığınızı bulamazsınız. Dış kaynaklarda çok özel konulara dair örnek projeler bulabilrsiniz(Tom Looman'ın blogu gibi...) yada belki kitaplara başvurabilirsiniz.


Khubur' Alıntı:
Gördüğünüz üzere bir aktör sınıfının mesela
AActor* benimAktorum;
benimAktorum().aktörün zamanlayıcısını al. vs... gibi şeyleri kullanabilirsiniz.

benimAktorum isimli sınıf örneğinde parantezleri neden kullandınız? Böyle bir kullanım yok. Üstelik Smart Pointer kütüphanesi hakkında rehber hazırlamış birisiniz ve referans tipten sonra .(nokta) kullanmışsınız.

PHP:
benimAktorum->GlobalZamanlayiciReferansiniAl()

Ayrıca Actorün zamanlayıcısı yoktur. Aşağıda bazı yerlerde bunu hem onaylayıp hem çelişen yerler var. Actor sınıfına üye GetWorldTimerManager() fonksiyonu, tamamen, Actor üzerinden ait olduğu World'e oradan da TimerManager'a erişmeyi kısaltmak için yazılmıştır.

Normalde Actor üzerinde;
PHP:
UWorld* World = GetWorld();
if (World != nullptr)
{
    World->GetTimerManager();
}
yada
PHP:
ActorInstance->GetWorld()->GetTimerManager();
yerine
PHP:
ActorInstance->GetWorldTimerManager()

Khubur' Alıntı:
Burada . ile işaretçi olan bir metoda erişmek için kullanıyoruz. Peki FTimerManager nedir? O da bir sınıftır. Bu sınıf ile oyun dünyasındaki ya da aktördeki bir sınıfa eriştiğiniz zaman size geri döner mesela
GetWorld()->GetTimerManager diyelim. burada dönen bir FTimerManagerin örneğidir. CountdownTimerHandle dediğiniz parametreyi tutar.
FTimerManager aslında bir struct. Aslında C++'da struct ile class arasında, varsayılan erişim düzenleyicisi (structda varsayılan public, classda privatedir) dışında hiçbir fark yoktur, ancak; söz konusu UE4 olduğunda vardır. Çoğunlukla F notasyonu almış yapılar structtır ve USTRUCTtır ve her USTRUCT değer olarak kullanılırken; her UCLASS referans olarak kullanılır. Ayrıca CountdownTimerHandle(ki bir FTimerHandledır) dediği parametreyi tutmaz, o değeri kullanır ve/veya onun üzerine yazar(InOut parameter).

Şöyle ifade etmek daha doğrudur. FTimerManager, oyun başladığından beri ne kadar zaman geçtiğini, son çizdirilen kareden beri ne kadar zaman geçtiğini saniye cinsiden tutan ve ilgili diğer bütün zamansal süreçleri yönetmek için kullanılan bir yapıdır. UWorld sınıfının bir üyesidir ve onun üzerinden erişilir, ancak; her Actorün bulunduğu World farklı olabileceğinden, Actorün ait olduğu Worldün zaman yöneticisine başvurmak için GetWorldTimerManager() fonksiyonu oluşturulmuştur.


Khubur' Alıntı:
Eğer oyun dünyasında zamanı tutacaksanız buna göre bir timer oluşturmanız gereklidir. Bu TimerHandle sınıfı gerçek çalışma zamanlı olacağı için oyun motorunun içinde tanımlanmıştır. O yüzden AActor sınıfından türemiş.. Fakat aktörün içindeyse, örnekteki metodu kullanmanız gereklidir.

FTimerHandle mı AActor sınıfından türemiş? Galiba çok hızlı ve dikkatsiz yazıyorsunuz, ifadeleriniz yanlış oluyor. Onun Actor sınıfından türemediğini iyi bildiğinizi biliyorum.
 
Khubur' Alıntı:
dvl' Alıntı:
C++ programlamayı yazılı olarak nereden öğrenebilirim? Unreal engine'in sitesinde yeterince bilgi yok genellikle blueprint için anlatılmış. Olanları'da pek anlamadım çünkü mesela


böyle bir kod belirtmiş. fakat ben burda "GetWorldTimerManager" fonksiyonunun ne işe yaradığını bilmiyorum. Bunun gibi, tüm fonksiyonların ve işlevlerinin yer aldığı kaynak önerir misiniz?

Soru1: 

C++ programlamayı öğrenmek için öncelikle basit olarak programlamanın genel mantığını öğrenmelisiniz. Çünkü kendine has bazı şablonları ve işaretçileri taşır. Dökümantasyonlardaki örnekler daha önceden oyun programlaması ile uğraşmış herhangi bir kişi için iyi bir örnektir. Eğer C++ dilinde kendinizi uygun hissetmiyorsanız Unreal Engine 4 ile uğraşmak mantıklı değil. 

C++ öğrenmek için yazılı kaynaklar:
https://www.tutorialspoint.com/cplusplus/   (bu siteyi öneriyorum)
https://www.sololearn.com/Course/CPlusPlus/ (daha interaktif. buradaki her şeyi bitirmeniz temel şeyleri öğrenmek için yeterli olacaktır.)

Temel eğitimleri öğrendikten sonra:
SDL veya SFML grafik kütüphaneleri için 2D bazlı oyunlar yaparak oyun programlama yeteneklerinizi geliştirebilirsiniz. Bu kütüphaneler klavye giriş çıkışı, ağ, ses ve grafik çizdirmek için hazırlanmış kütüphanedir. Bunlar ile ilgilenmek yapılan bir oyunun genel mantığı için uygun olacaktır. 

Eğer renderlemek sizi ilgilendiriyor daha matematiksel ve geometrik işlemlerde kullanıp daha derinle girmek istiyorsanız OpenGL ya da Vulkan gibi kütüphaneleri kullanarak bir oyun yapabilirsiniz.

Unreal Engine 4 ile programlamayı internet üzerinden öğrenebileceğiniz kaynaklar (bunun dışında bende bir pdf kitap var sana atabilirim)
https://www.udemy.com/
http://www.tomlooman.com/category/unreal-engine-4/cpp/ 
http://orfeasel.com/blog/

Bunun dışında Unreal Slackers Discord topluluğuna katılıp C++ programlama kanalına katılabilirsiniz.  http://unrealslackers.org/

Soru2:

Unreal Engine için sınıflara baktığınız zaman bir çok farklı şekilde tanımlama görürsünüz. UObject sınıfı tüm sınıfların başında gelir. Diğer sınıflar bu sınıftan türemiştir. https://docs.unrealengine.com/latest/INT/API/Runtime/CoreUObject/UObject/UObject/index.html

UObjectin bir alt sınıfı olan AActor sınıfına bakın.
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/GameFramework/AActor/index.html

Bahsettiğiniz GetWorldTimerManager fonksiyonu bir AActor sınıfının metodu.
https://docs.unrealengine.com/lates...mework/AActor/GetWorldTimerManager/index.html

281bcb29f96b4500857cf70075da558f.png


Gördüğünüz üzere bir aktör sınıfının mesela
AActor* benimAktorum;
benimAktorum().aktörün zamanlayıcısını al. vs... gibi şeyleri kullanabilirsiniz.

Burada . ile işaretçi olan bir metoda erişmek için kullanıyoruz. Peki FTimerManager nedir? O da bir sınıftır. Bu sınıf ile oyun dünyasındaki ya da aktördeki bir sınıfa eriştiğiniz zaman size geri döner mesela
GetWorld()->GetTimerManager diyelim. burada dönen bir FTimerManagerin örneğidir. CountdownTimerHandle dediğiniz parametreyi tutar.


Bundan sonra setTimer metoduna bakalım.
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/FTimerManager/SetTimer/4/index.html
 
GetWorld()->GetTimerManager().SetTimer(parametreler...) gördüğünüz gibi aslında her şey sınıfların birbirinden aldıkları örnekler sonucunda çıkan bir veri tipidir. Bu bir sınıf veri tipi olabilir ya da saf bir tamsayı veri tipi olabilir.

UObjectin bir alt sınıfı olan UWorld bakın. UObjectten türemiş olan bir sınıf. Ve içinde bazı Timer metodları var. Oyun dünyasının genel olarak soyutlanan bir sınıf örneğidir
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/index.html

Eğer oyun dünyasında zamanı tutacaksanız buna göre bir timer oluşturmanız gereklidir. Bu TimerHandle sınıfı gerçek çalışma zamanlı olacağı için oyun motorunun içinde tanımlanmıştır. O yüzden AActor sınıfından türemiş.. Fakat aktörün içindeyse, örnekteki metodu kullanmanız gereklidir.

Son olarak eğer aradığınız kodun bir örneğini bulamadıysanız yapılan template projelerin içerisinde ya da actor.h gibi ana başlık dosyasına gidip oradaki bazı fonksiyonları deşebilirsiniz. Yararlı olacak bazı şeyler bulacaksınız. Unreal Slackers'da ue4-programming kanalında bu tip sorarsanız daha çabuk yanıt verecek bir çok yardımsever insan tanıyorum.
PDF kitap olarak türk birinin yazdığı bir şey mi ? paylaşman mümkün mü ?