Khubur

Bilinen üye
14 Eyl 2016
896
340
63
(35) İzmir
zeybek.games
Merhaba topluluk! Bu yazıda size basitçe, C++ kodlarını nasıl blueprinte aktaracağınız hakkında bilgi ve bir örnek verilmiştir. Temel amaç, C++ kodlarını yazarak ekibinizdeki kişilerin yapacağı işlemleri hızlandırmaktır.

Hızlı yoldan aktarmak için; 
Üye fonksiyonları aktarmak için : UFUNCTION(BlueprintCallable)
Veri üyelerini veya değişkenleri aktarmak için UPROPERTY(EditAnywhere, BlueprintReadWrite) 



Makrolarını kullanarak C++ kodlarını blueprinte aktarabilirsiniz. Makroların parametleri için
UFUNCTION belirteçleri -> https://docs.unrealengine.com/en-us/Programming/UnrealArchitecture/Reference/Functions/Specifiers
UPROPERTY belirteçleri -> https://docs.unrealengine.com/en-US/Programming/UnrealArchitecture/Reference/Properties/Specifiers

Basit olarak belirtilen fonksiyonu şu şekilde aktarabilirsiniz. Öncelikle bir C++ sınıfı oluşturalım.



Basit olarak bir aktör bileşeni oluşturuyorum.



 

AktorBileseni adında bir ActorComponent C++ sınıfı oluşturdum. AktorBileseni.cpp ve AktorBileseni.h dosyaları UE4 tarafından yaratıldı.

aktorbileseni.h dosyasında belirtilen fonksiyonun blueprintler tarafından çağıraiblecğeini böyle ayarlıyorum.




Burada UFUNCTION hazır bulunan bir makrodur. Dikkat ederseniz sonunda noktalı virgül yoktur. İki tane parametre almıştır birincisi BlueprintCallable diğeri Category dir.
BlueprintCallable: Bu seçenek ile blueprint üzerinden bu fonksiyonu çağırabiliriz.
Catergory: Bu belirtilen fonksiyonun ilişkili olması için kategorisini belirler. 


Sahneye basit bir küp attım, ve Add Component diyerek AktorBilsenini C++ kodlarını kübe ekledim. Daha sonra compile ediyoruz.(UNUTMAYIN)




Yarattığım küp üzerinde bir Blueprint oluşturdum. ("gelen menüye tamam diyebilir ya da blueprinte bir ad verebilirsiniz.")

Kübün bp içerisine giriyoruz ve ta-da!



İşte bu kadar basit! Yazdığınız çekirdek kod ile blueprintler içinde fonksiyon olarak çağırabilirsiniz.

Değişkenleri kontrol etmek. Basitçe, eğer kapsüllemeyi public olarak yaparsanız ve C++ sınıfınızın bir blueprint sınıfını oluşturursanız public olan değişkenleri blueprint içinde kullanabilirsiniz.

UPROPERTY() Makrosunu kullanmak, bu makro ile değişkenleri Blueprint ile kullanabilirsiniz. Değişik parametreler alır bakınız: https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Reference/Properties/

UPROPERTY(EditAnywhere)
int32 tamsayiDegerim;

Bu C++ sınıfıdan bir blueprint sınıfı oluşturursanız bu değişkeni blueprint üzerinde değişikliğe uğratabilirsiniz.

Gelişmiş Seviye: Aşağıda vereceğim örnek kod broadcastler ile belirlenen durum gerçekleştirdiğinde aktif oluyor.

 



DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDoorEvent);   -> Burada eventleri oluşturabilmek için bir makro tanımlıyoruz


UPROPERTY(BlueprintAssignable)       -> Burada iki fakrlı olay tanımlamak için bir makro tanımlıyoruz
FDoorEvent OnOpen;

UPROPERTY(BlueprintAssignable)  -> Burada iki fakrlı olay tanımlamak için bir makro tanımlıyoruz
FDoorEvent OnClose;

Koddadaki şarta göre blueprint içerisinde tanımlanan iki olaydan birisi çalışır. 

NOT: Şu andaki sürümde(4.14) blueprintten c++ aktarım yoktur. Fakat geliştiriciler bir sonraki sürümde bu özelliğin ekleneceğini söylemektedir.
 
C++ bilgim olmadığı için bunu kullanmam zor görünüyor, ama dışardan bakan birisi olarak söylemeliyim ki gayet hoş bir özellik. Blueprint'lerin bazı uzun engellerini kısaca delip geçmek için birebir. 
Eğer C++ bilseydim level'ı nasıl Skeletal Mesh'lerle dolduracağım (Yani Foliage Spawner'ı Skeletal Mesh'lere ayarlayacak bir Component) bir sistem yapmayı çok isterdim şahsen. Bu konu hakkında bir bilginiz var mı?
 
furkanxdgs4' Alıntı:
C++ bilgim olmadığı için bunu kullanmam zor görünüyor, ama dışardan bakan birisi olarak söylemeliyim ki gayet hoş bir özellik. Blueprint'lerin bazı uzun engellerini kısaca delip geçmek için birebir. 
Eğer C++ bilseydim level'ı nasıl Skeletal Mesh'lerle dolduracağım (Yani Foliage Spawner'ı Skeletal Mesh'lere ayarlayacak bir Component) bir sistem yapmayı çok isterdim şahsen. Bu konu hakkında bir bilginiz var mı?


Nasıl yapılacağı hakkında bir bilgim yok ama Unreal ile çalışacaksan bu ve bunun gibi şeyleri yapmak için C++ hakkında çok şey bilmene gerek yok. 
OOP yapısını ve işaretçileri bilmenin yanı sıra basit vektör kullanımlarını bilmen bütün ihtiyaçlarını karşılar. Anlaşılması zor olan kısım oyun motorunun içerisindeki Pawnları, PlayerController, GameMode, Aktörl vs bunun gibi soyutsal ifadeleri mantıksal olarak birleştirmek. Gözünü korkutmasın.