#UE4 UnrealC++小道具集
ここに載っている定型文は全てUnrealC++における重要な機能になります。
UnrealC++を使う上で最低限理解しなければならない一覧で
プログラムを打ってると1時間に何回も頻出することになります。
これを毎回インターネットから検索していると時間的なコストが非常に高くなりますので
Cliborに登録して素早く呼び出せるようにすると非常に便利です。
clibor(http://forest.watch.impress.co.jp/library/software/clibor/)
に登録しておくとCtrl2回でいつでもどこでも呼び出せるようになります。
UPROPERTY標準
これを付けておくと変数がBPからアクセスできるようになります。
UPROPERTY(BlueprintReadWrite, EditAnywhere )
##UFUNCTION標準
これを付けておくと関数がBPからアクセスできるようになります。
UFUNCTION(BlueprintCallable, Category = "MyHoming")
##TArrayイテレータ使用例
TArrayのイテレータの呼び出し方になります。
for (auto Iter(TArray.CreateIterator()); Iter; Iter++)
{
}
##両対応インタフェース
C++ , BP のどっちからでも実装し、呼び出せるインタフェースの書き方です。
半分はヘッダ、半分はCppファイルにコピペして使います。
ちなみにインタフェースには多数の書き方が有りますが
どれか一つに絞って使用することをお勧めします。
#include "EnemyInter.generated.h"
/**
*
*/
UINTERFACE(MinimalAPI , Blueprintable)
class UEnemyInter : public UInterface
{
GENERATED_UINTERFACE_BODY()
};
class IEnemyInter
{
public:
GENERATED_IINTERFACE_BODY()
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "MyHoming")
int Damage();
};
UEnemyInter::UEnemyInter(const class FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
int IEnemyInter::Damage_Implementation()
{
return 0;
}
##両対応インタフェースの実行方法
上記インタフェースの使用方法です。
インタフェースは宣言方法同様に様々な使用方法が有ります。
自分のスタイルに合った使用方法で統一する事をお勧めします。
AActor *tempActor = Iter->GetActor();
if (tempActor->GetClass()->ImplementsInterface(UEnemyInter::StaticClass()))
if(!IEnemyInter::Execute_IsDead(tempActor))
##USTRUCT例
構造体の定義例です。
BPで宣言できる構造体とは別物ですので注意が必要です。
USTRUCT(BlueprintType)
struct FFlowerStruct
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Flower Struct")
int32 NumPetals;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Flower Struct")
FLinearColor Color;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Flower Struct")
FVector Scale3D;
};
##デリゲート定義例
AComponentでは非常に重要な機能になるデリゲートになります。
AComponent内でイベントを発生させ、Actorで定義するBPを実行するための書き方になります。
これを知ってないとAComponentの良さを半分も使えません。
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMyEventTimer);
UPROPERTY(BlueprintAssignable )
FMyEventTimer m_TimerTick;
##通常のnativeEvent
Actorを継承したクラス内でこれを定義しておくと
BP側からコードを入れられるようになります。
上のデリゲートはAComponent用
こちらはActor用の定義方法と考えればOKです。
UFUNCTION(BlueprintNativeEvent, Category = "ShotLib")
void Charge(int32 Damage);
void Charge_Implementation(int32 Damage)
{
// your code here
}
##ENUM例
ENUMの例です。
この方法で書いておくとCPPで使うにもBPで使うにも問題なく使用でき
非常に便利です。
UENUM(BlueprintType) //"BlueprintType" is essential to include
enum class EVictoryEnum : uint8
{
VE_Dance UMETA(DisplayName="Dance"),
VE_Rain UMETA(DisplayName="Rain"),
VE_Song UMETA(DisplayName="Song")
};
##ログ書き込み
デバッグの際にスクリーン上に文字を出すために使用します。
ただし、見た目のわりに非常に重い処理なので本番には残さないよう注意が必要です。
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, TimeToDisplay, Color, Text);
}
if (PrintToLog)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *Text);
}