okka33

Yeni üye
3 Haz 2017
16
0
0
25
(33) Mersin
Yeni kütüphane eklediğimde aşağıdaki hatayı alıyorum.


1.PNG
nW3RoN.png
vpvb7A.png
 
Kendi yarattığınız statik kütüphaneyi Unreal Motor ile inşa etmek istiyorsanız Unreal Build sistemine(Build.cs dosyası) gerekli bildirimleri ayarlamanız ve Visual Studio ile kütüphanenizi bağdaştırıcıya belirtmeniz gereklidir.

Bunun dışında projenizde bulunan normal kendi yarattığınız dosyalarınızı #include "baslikdosyasi.h" gibi ön-işlemci komutuyla projeye dahil edebilirsiniz.  (UE4 Native her C++ kodunu tanır.)

Burada nasıl yapıldığına dair kolay bir anlatım var:
https://wiki.unrealengine.com/Linking_Static_Libraries_Using_The_Build_System

Not: Gönderdiğiniz ilk resim kendi bilgisayarınızın bir dizinini belirtiyor(file:///C:/Users/oguzk/Desktop/1.PNG). Bunun yerine imaj yükleme sitelerine yükleyin.
Not2: Kendi yarattığınız başlık dosyaları sorunsuz şekilde ekleyebilirsiniz. (.h ve .hpp dosyaları)
 
[UETR]Khubur' Alıntı:
Kendi yarattığınız statik kütüphaneyi Unreal Motor ile inşa etmek istiyorsanız Unreal Build sistemine(Build.cs dosyası) gerekli bildirimleri ayarlamanız ve Visual Studio ile kütüphanenizi bağdaştırıcıya belirtmeniz gereklidir .

Burada nasıl yapıldığına dair kolay bir anlatım var:
https://wiki.unrealengine.com/Linking_Static_Libraries_Using_The_Build_System

Not: Gönderdiğiniz ilk resim kendi bilgisayarınızın bir dizinini belirtiyor(file:///C:/Users/oguzk/Desktop/1.PNG). Bunun yerine imaj yükleme sitelerine yükleyin.

Buradaki statik kütüphaneyi ben yaratmadım. Eklemediğim zaman hata vermiyor ama eklediğim zaman böyle oluyor.
Not: Bu hatayı aktöre eklediğim bütün statik kütüphanelerde alıyorum. Ama aktörü ilk oluşturduğumda ekli olarak gelen kütüphanelerde bu hatayı almıyorum.
 
Statik kütüphaneyi sizin veya başkasının yarattığı önemli değil :) UObject sınıfını bilip bu sınıftan veya başka bir sınıftan katılım alıp doğru uygulamları bildiğinizi varsayıyorum. Peki başka bir kütüphaneyi nasıl ekleyeceğim sorusunu üstte verdim fakat burada uyguladığın eksik/hatalı bir şeyler var. Eklemezsen doğal olarak build için özel bir ayarlama olmadığı için hata vermez. Size bilgileri bilmediğinizi sayarak tekrardan veriyorum.

Öncelikle şu kavramlarını bilmen lazım:

Statik Kütüphane nedir? Nasıl yaratılır? Unreal için neden kullanmalıyım?
C++ için statik kütüphaneleri kullanırsanız kodları yeniden çok kolay bir şekilde tekrardan entegrasyon yapmadan kullanabilirsiniz. Aynı işleri tekrardan yapmak yerine, bir defalığına statik kütüphane yaratıp ve bunu referans olarak Unreal Motoruna aktarınca, bağlanan kod, sizin artık Unreal projenizin bir parçası olur.

VS için statik kütüphane yaratmak: https://msdn.microsoft.com/en-us/library/ms235627.aspx     (sanırım wiki eğitim serisinde de bu var.)

UObject bilmek ve anlamak:
Diyelim ki kendin bir kütüphane yazdın ve static libary ile uğraşmak istemiyorsun.

Kod:
UCLASS() 
class UBenimSinifim : public UObject
{
	GENERATED_UCLASS_BODY()
        // yapilacak seyler
};

Kütüphane dışında sınıf eklemek istersen basitçe UObject sınıfından katılım alıp GENERATED_UCLASS_BODY makrosu ile kendi sınıflarını ilişkilendirilmiş bir şekilde kullanabilirsin. Bu makro ile Unreal Motoru senin sınıfını ilişkili olarak anlar. Fakat bunu diğer ilişkili olan ve Unrealdan bağımsız sınıflarla kullanacaksan o zaman bunun için uğraşacağın çok iş vardır. UObject bütün sınıfların ana sınıfı olduğu için bu sınıftan bir katılım alıp sınıf oluşturduk. FHttpModule gibi HTTP çalışma-zamanı içerisinde olan arayüzü kullanabilrisin.

Ayrıca gönderdiğiniz resimlerde ben bir hata mesajı göremiyorum. Size var olan olayı nasıl yapacağını tekrardan bahsettim.
 
okka33' Alıntı:
[UETR]Khubur' Alıntı:
Kendi yarattığınız statik kütüphaneyi Unreal Motor ile inşa etmek istiyorsanız Unreal Build sistemine(Build.cs dosyası) gerekli bildirimleri ayarlamanız ve Visual Studio ile kütüphanenizi bağdaştırıcıya belirtmeniz gereklidir .

Burada nasıl yapıldığına dair kolay bir anlatım var:
https://wiki.unrealengine.com/Linking_Static_Libraries_Using_The_Build_System

Not: Gönderdiğiniz ilk resim kendi bilgisayarınızın bir dizinini belirtiyor(file:///C:/Users/oguzk/Desktop/1.PNG). Bunun yerine imaj yükleme sitelerine yükleyin.

Buradaki statik kütüphaneyi ben yaratmadım. Eklemediğim zaman hata vermiyor ama eklediğim zaman böyle oluyor.
Not: Bu hatayı aktöre eklediğim bütün statik kütüphanelerde alıyorum. Ama aktörü ilk oluşturduğumda ekli olarak gelen kütüphanelerde bu hatayı almıyorum.

https://wiki.unrealengine.com/UE4.10_How_To_Make_HTTP_GET_Request_in_C++

Sanıyorum burada anlatılan konuyu uygulamaya çalışıyorsunuz. Kendi kütüphaneniz olmasa da HTTP modülünü eklemeniz gerekiyor. Konuda geçen Adding dependencies for HTTP and JSON başlığında Build.cs'ye eklediğe modüle dikkat edin.

@Khubur Not: Statik kütüphanelerin modül olarak eklenmesi gerekmez. Bu sadece modül sistemi kullanan kütüphaneler içindir. Hatta UE4 içinde kendi oluşturduğunuz kütüphaneler için de UObject ve GENERATED_BODY makrolarını bile geçtim UCLASS bile kullanmak zorunda değilsiniz. UE4 Native her C++ kodunu tanır. Buradaki kısıtlamalar şunlardır.
1. Hedef platform: Platform bağımsızlığı istiyorsanız, platform bağımlı kodu platform bağımsız koda dönüştürmeniz gerek. Basit anlamda bir kod yazıyorsanız sorun yok ama örneğin multithreading gibi bir konuya giriyorsanız. Ya "preprocessor" ifadelerle her platform için ayrı "thread" kütüphanelerini kullanmanız gerek yada burada UE4'ün Generic Platform kütüphanelerinden ve FPlatformProcess gibi sınıflarında yararlanmanız gerekir.
2. Eğer Blueprintler gibi Engine ile DesignTime 'da iletişime geçmek istiyorsanız bu durumda UClass, UStruct, UObject gibi ifadeler olmakla birlikte zaten minimum UActorComponent ve AActor sınıflarını doğrudan kullanmanız gerekiyor. Bunun tek istisnası USTRUCT ve UENUM gibi yapıalrdır.
 
[UETR]cahitburak' Alıntı:
okka33' Alıntı:
Buradaki statik kütüphaneyi ben yaratmadım. Eklemediğim zaman hata vermiyor ama eklediğim zaman böyle oluyor.
Not: Bu hatayı aktöre eklediğim bütün statik kütüphanelerde alıyorum. Ama aktörü ilk oluşturduğumda ekli olarak gelen kütüphanelerde bu hatayı almıyorum.

https://wiki.unrealengine.com/UE4.10_How_To_Make_HTTP_GET_Request_in_C++

Sanıyorum burada anlatılan konuyu uygulamaya çalışıyorsunuz. Kendi kütüphaneniz olmasa da HTTP modülünü eklemeniz gerekiyor. Konuda geçen Adding dependencies for HTTP and JSON başlığında Build.cs'ye eklediğe modüle dikkat edin.

@Khubur Not: Statik kütüphanelerin modül olarak eklenmesi gerekmez. Bu sadece modül sistemi kullanan kütüphaneler içindir. Hatta UE4 içinde kendi oluşturduğunuz kütüphaneler için de UObject ve GENERATED_BODY makrolarını bile geçtim UCLASS bile kullanmak zorunda değilsiniz. UE4 Native her C++ kodunu tanır. Buradaki kısıtlamalar şunlardır.
1. Hedef platform: Platform bağımsızlığı istiyorsanız, platform bağımlı kodu platform bağımsız koda dönüştürmeniz gerek. Basit anlamda bir kod yazıyorsanız sorun yok ama örneğin multithreading gibi bir konuya giriyorsanız. Ya "preprocessor" ifadelerle her platform için ayrı "thread" kütüphanelerini kullanmanız gerek yada burada UE4'ün Generic Platform kütüphanelerinden ve FPlatformProcess gibi sınıflarında yararlanmanız gerekir.
2. Eğer Blueprintler gibi Engine ile DesignTime 'da iletişime geçmek istiyorsanız bu durumda UClass, UStruct, UObject gibi ifadeler olmakla birlikte zaten minimum UActorComponent ve AActor sınıflarını doğrudan kullanmanız gerekiyor. Bunun tek istisnası USTRUCT ve UENUM gibi yapıalrdır.

O sorunu çözdüm yardımınız için teşekkür ederim ama bu sefer de aşağıdaki hataları aldım.

7Nrrlv.png


PrZZyQ.png


gWJJ72.png


9dPPnQ.png


qWZZ5W.png


Mv33Oa.png
 
okka33' Alıntı:
[UETR]cahitburak' Alıntı:
https://wiki.unrealengine.com/UE4.10_How_To_Make_HTTP_GET_Request_in_C++

Sanıyorum burada anlatılan konuyu uygulamaya çalışıyorsunuz. Kendi kütüphaneniz olmasa da HTTP modülünü eklemeniz gerekiyor. Konuda geçen Adding dependencies for HTTP and JSON başlığında Build.cs'ye eklediğe modüle dikkat edin.

@Khubur Not: Statik kütüphanelerin modül olarak eklenmesi gerekmez. Bu sadece modül sistemi kullanan kütüphaneler içindir. Hatta UE4 içinde kendi oluşturduğunuz kütüphaneler için de UObject ve GENERATED_BODY makrolarını bile geçtim UCLASS bile kullanmak zorunda değilsiniz. UE4 Native her C++ kodunu tanır. Buradaki kısıtlamalar şunlardır.
1. Hedef platform: Platform bağımsızlığı istiyorsanız, platform bağımlı kodu platform bağımsız koda dönüştürmeniz gerek. Basit anlamda bir kod yazıyorsanız sorun yok ama örneğin multithreading gibi bir konuya giriyorsanız. Ya "preprocessor" ifadelerle her platform için ayrı "thread" kütüphanelerini kullanmanız gerek yada burada UE4'ün Generic Platform kütüphanelerinden ve FPlatformProcess gibi sınıflarında yararlanmanız gerekir.
2. Eğer Blueprintler gibi Engine ile DesignTime 'da iletişime geçmek istiyorsanız bu durumda UClass, UStruct, UObject gibi ifadeler olmakla birlikte zaten minimum UActorComponent ve AActor sınıflarını doğrudan kullanmanız gerekiyor. Bunun tek istisnası USTRUCT ve UENUM gibi yapıalrdır.

O sorunu çözdüm yardımınız için teşekkür ederim ama bu sefer de aşağıdaki hataları aldım.

Makaleyi daha dikkatli inceleyin. Eklemeniz gereken başka modüller de var:
"Json", "JsonUtilities"
 
okka33' Alıntı:
[UETR]cahitburak' Alıntı:
Makaleyi daha dikkatli inceleyin. Eklemeniz gereken başka modüller de var:
"Json", "JsonUtilities"

Onları eklemiştim zaten

O halde belki IntelliSense yavaş olduğu için bu hataları görüyorsunuz. Projeyi derlemeyi deneyin, yine hata alırsanız Output penceresindeki çıktı mesajlarını gösterin.
 
@okka33
273. satırda dediği gibi generated.h dosyasının altına #include ön-işlemci direktifini kullanmışsınız. Unreal motorunun derlemesi için ön işlemci direktifleri için generated.h dahil etme dosyası sıralama olarak en sonda olması lazım. Eğer İngilizce bilmiyorsanız ve basitçe bir log okuyamıyorsanız bu işe girişmemeniz en doğru seçim. Tübitak gibi bir şeyler gördüm, ne yapmaya çalıştığınızdan bir fikrim yok fakat bilimsel bir gerçekçilik peşindeyseniz, bu işi bilmeden yapmanız bir bilimsel esas değildir.

@cahitburak 
burada herhangi bir şekilde başka kütüphaneyi normal bir şekilde dahil etme("include") edebileceğini varsaydım. Kendi UObject sınıfını yaratarak diğer UE sınıfları ile doğru bir şekilde etkileşime geçebilir. fakat Unreal sistemine HTTP modülü gibi bir şey üretiyor sandım fakat amacı PHP ve jSon ile basitçe motorun içinden bir istek yollamak ve jSon ile HTTP isteği alıp motora uygulamak.
 
[UETR]Khubur' Alıntı:
@okka33
273. satırda dediği gibi generated.h dosyasının altına #include ön-işlemci direktifini kullanmışsınız. Unreal motorunun derlemesi için ön işlemci direktifleri için generated.h dahil etme dosyası sıralama olarak en sonda olması lazım. Eğer İngilizce bilmiyorsanız ve basitçe bir log okuyamıyorsanız bu işe girişmemeniz en doğru seçim. Tübitak gibi bir şeyler gördüm, ne yapmaya çalıştığınızdan bir fikrim yok fakat bilimsel bir gerçekçilik peşindeyseniz, bu işi bilmeden yapmanız bir bilimsel esas değildir.

@cahitburak 
burada herhangi bir şekilde başka kütüphaneyi normal bir şekilde dahil etme("include") edebileceğini varsaydım. Kendi UObject sınıfını yaratarak diğer UE sınıfları ile doğru bir şekilde etkileşime geçebilir. fakat Unreal sistemine HTTP modülü gibi bir şey üretiyor sandım fakat amacı PHP ve jSon ile basitçe motorun içinden bir istek yollamak ve jSon ile HTTP isteği alıp motora uygulamak.

Peki unreal engine de herhangi bir web sitesinin kaynak kodunu bir variable ye nasıl kaydedebilirim
 
okka33' Alıntı:
[UETR]Khubur' Alıntı:
@okka33
273. satırda dediği gibi generated.h dosyasının altına #include ön-işlemci direktifini kullanmışsınız. Unreal motorunun derlemesi için ön işlemci direktifleri için generated.h dahil etme dosyası sıralama olarak en sonda olması lazım. Eğer İngilizce bilmiyorsanız ve basitçe bir log okuyamıyorsanız bu işe girişmemeniz en doğru seçim. Tübitak gibi bir şeyler gördüm, ne yapmaya çalıştığınızdan bir fikrim yok fakat bilimsel bir gerçekçilik peşindeyseniz, bu işi bilmeden yapmanız bir bilimsel esas değildir.

@cahitburak 
burada herhangi bir şekilde başka kütüphaneyi normal bir şekilde dahil etme("include") edebileceğini varsaydım. Kendi UObject sınıfını yaratarak diğer UE sınıfları ile doğru bir şekilde etkileşime geçebilir. fakat Unreal sistemine HTTP modülü gibi bir şey üretiyor sandım fakat amacı PHP ve jSon ile basitçe motorun içinden bir istek yollamak ve jSon ile HTTP isteği alıp motora uygulamak.

Peki unreal engine de herhangi bir web sitesinin kaynak kodunu bir variable ye nasıl kaydedebilirim

Basitçe PHP dosyası üzerinde bir veritabanına bağlanıp daha sonra veritabanı ile gelen bir dizi sorguyu jSon çıktısı olarak aktarmanız gereklidir. Bunu aynı şekilde motor üzerinden bir HTTP isteği ile belirtilen .php dosyası üzerinden jSon objesini almanız gereklidir.

Mesela PDO veya mysqli kütüphaneleri ile bir PHP-MySQL bağlantısı kurup, php dosyası üzerinden aynı @cahitburak verdiğini linkteki örnekteki gibi bir jSon objesi çözmesi edinebilirsin.

Bir örnek(PDO ile ):
http://www.codingcage.com/2016/04/how-to-convert-mysql-rows-into-json.html

Bir video örneği (mysqli ile):
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.
 
[UETR]cahitburak' Alıntı:
Web sitenin kaynak kodu diyerek neyi kastediyorsunuz? Kaynak kodu göremezsiniz, HTML, Javascript, CSS gibi Client tarafını görebilirsiniz. Yada basit bir webservis yazmak istiyorsanız da Khubur'un söylediklerini takip edin.

Google Chrome' deki f12 element bölümünü kastediyorum
 
okka33' Alıntı:
[UETR]cahitburak' Alıntı:
Web sitenin kaynak kodu diyerek neyi kastediyorsunuz? Kaynak kodu göremezsiniz, HTML, Javascript, CSS gibi Client tarafını görebilirsiniz. Yada basit bir webservis yazmak istiyorsanız da Khubur'un söylediklerini takip edin.

Google Chrome' deki f12 element bölümünü kastediyorum

O halde doğru yoldasınız. Küçük bir değişiklikle gönderdiğniz isteğin(Request) içerik biçimini(Content-Type), "application/json" değil, "text/html" olarak verin. Bu sayede herhangi bir web sitesi verdiğinizde html çıktılarını alabilirsiniz. Haliyle JSON Encode bölümüne de ihtiyacınız yok.

PHP:
/*Http call*/
void AHttpActor::MyHttpCall()
{
    TSharedRef<IHttpRequest> Request = Http->CreateRequest();
    Request->OnProcessRequestComplete().BindUObject(this, &AHttpActor::OnResponseReceived);
    //This is the url on which to process the request
    Request->SetURL("http://localhost:8081/WebApi/getint.php");
    Request->SetVerb("GET");
    Request->SetHeader(TEXT("User-Agent"), "X-UnrealEngine-Agent");
    // Request->SetHeader("Content-Type", TEXT("application/json")); bunun yerine
    Request->SetHeader("Content-Type", TEXT("text/html"));
    Request->ProcessRequest();
}

OnResponseRecieved bölümünün tamamını aşağıdaki kod ile değiştirin.
PHP:
AHttpActor::OnResponseRecieved(...)
{
   const FString htmlResult = Response->GetContentAsString();
}
 
Etkileşime veriyi doğru bir şekilde tutmak istiyorsanız bir veritabanına ihtiyacınız var. Eğer veriniz bir JSON objesi şeklinde değil normal saf katar("string") şeklinde gelirse efektiflik açısından işe yaramayacaktır. Tübitak ile bir şeyler yapıyorsanız gerçi pXe ile ağ üzerinden boot edilebilen 80lerin yazılımlarını tübitağa "kendi bilim projem" diye kakalayan birisi varsa emin olun siz onları daha fazla şeylere inandırabilirsiniz. O yüzden yalın("plain") bir html döndürmek yerine, php'nin POST methodu veya javascript AJAX isteği ile gelen formdan ya da başka bir yerdeki veriyi doğru bir şekilde veritabanına aktarıp jSon objeleri ile motora gönderip çalışabilirsiniz. Bu şekilde jSonObjesini aktarak  motor FJsonObject içerisindeki bellirli üye fonskiyonlara erişip çok kolay bir şekilde bir dizi işlemleri gerçekleştirebilirsiniz.
 
[UETR]Khubur' Alıntı:
Etkileşime veriyi doğru bir şekilde tutmak istiyorsanız bir veritabanına ihtiyacınız var. Eğer veriniz bir JSON objesi şeklinde değil normal saf katar("string") şeklinde gelirse efektiflik açısından işe yaramayacaktır. Tübitak ile bir şeyler yapıyorsanız gerçi pXe ile ağ üzerinden boot edilebilen 80lerin yazılımlarını tübitağa "kendi bilim projem" diye kakalayan birisi varsa emin olun siz onları daha fazla şeylere inandırabilirsiniz. O yüzden yalın("plain") bir html döndürmek yerine, php'nin POST methodu veya javascript AJAX isteği ile gelen formdan ya da başka bir yerdeki veriyi doğru bir şekilde veritabanına aktarıp jSon objeleri ile motora gönderip çalışabilirsiniz. Bu şekilde jSonObjesini aktarak  motor FJsonObject içerisindeki bellirli üye fonskiyonlara erişip çok kolay bir şekilde bir dizi işlemleri gerçekleştirebilirsiniz.

Bu şekilde sistemi de yavaşlatmış olur ama. Yapacağı projeye göre değişir yine de elinizde bir xml var(html) bunu veritabanına gönderip, jsona çevirip bir de json parse etmektense doğrudan html parse etmek daha hızlı sonuç verir kanaatimce.
 
Koddaki url yi URL variablesinden okutmaya çalıştığımda neden çalışmıyor.
Kod:
//Request->SetURL(localhost:8081/getInt); bölümünü aşağıdaki gibi yaptım
Request->SetURL(URL);