fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2022年12月 | ARCHIVE-SELECT | 2023年02月

| PAGE-SELECT |

≫ EDIT

UE5/UE4 C++でBPでオーバーライド(Override)できる関数を作成する(UFUNCTION(BlueprintNativeEvent)、UFUNCTION(BlueprintCallable)、_Implementation)

C++でBPでオーバーライド(Override)できる関数を作成する方法です。

こちらのサイトを参考にさせていただきました。

・UE4 UFUNCTIONの種類について
https://papersloth.hatenablog.com/entry/2018/09/19/195013

参考サイトさんをもとに実際やってみました。

まずはC++で関数を定義します。

// BP でオーバーライドできる関数の定義
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
int32 OverrideFunction(float InValue);

まずは「UFUNCTION(BlueprintNativeEvent, BlueprintCallable)」を使って関数を定義します。

C++での関数の実体はこんな感じで書くことになります。
C++での実体は「関数名 + _Implementation」という名称でUE側で自動的に紐づけられるようです。

// C++側の関数の実体
int32 OverrideFunction_Implementation(float InValue)
{

return (0);
}


これを実行するとBPで上記で定義した関数をオーバーライド(Override)することができます。
オーバーライド関数002
こんな感じで「関数」の「オーバーライド(Override)」から関数を選択して作成することができます。

BPでオーバーライドされた関数はこんな感じになりました。
オーバーライド関数001

最後にC++側で実行してみます。

int32 aValue = OverrideFunction(0.0f);

結果をみてると「C++で定義した関数」と上記「BPの関数」両方が実行されるのがわかります。

BP側で特殊な処理をしたい。
といったもので結構使うことがありそうなので、記述の仕方など覚えておきたいと思いました。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++でBPのイベント(Event)やBPのみで処理を記述する関数を作成する(UFUNCTION(BlueprintImplementableEvent)、UFUNCTION(BlueprintCallable))

C++でBPのイベント(Event)やBPのみで処理を記述する関数を作成する方法です。

こちらを参考にさせていただきました。

・UE4 UFUNCTIONの種類について
https://papersloth.hatenablog.com/entry/2018/09/19/195013

公式ドキュメントはこちら。

・ゲームプレイ要素をブループリントに公開する
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/

C++でBPのイベント(Event)を作成するには「UFUNCTION(BlueprintImplementableEvent)」を書いた定義することで
C++側から呼び出せるBPのイベント(Event)を作成することができるようです。

// イベントを定義
UFUNCTION(BlueprintImplementableEvent)

void OnEventNew(int32 InValue);

こんな感じですね。
この関数についてはBP側で処理を記述するためC++側での実体は必要ないようです。

これをC++側からコールすることでBPのイベントが呼ばれます。

// イベントを実行
OnEventNew(0);


公式ドキュメントにはこう書かれています。

BlueprintImplementableEvent
ネイティブ関数をブループリントに呼び出す代表的な方法です。
仮想関数をブループリントに実装しているようなものです。
実装されていない場合、この関数呼び出しは無視されます。
BlueprintImplementableEvent が戻り値または出力パラメータを持たない場合、イベントとして表示され、
右クリック してブループリントのイベント グラフで選択して利用できるということを覚えておいてください。
戻り値または出力パラメータがあれば、[My Blueprints] タブにリスト表示され、
右クリック して [implement] 関数を選択することでオーバーライドが可能になります。
BlueprintImplementableEvents は関数のネイティブ実装を持たないことにご注意ください。


参考サイトの方でもこう書かれています。

戻り値がvoidの場合はEventNodeが生成されるが
戻り値を持つ関数の場合はEventではなく関数として生成される


戻り値を持つ関数を定義するとイベントではなく関数になるようです。

// 関数を定義
UFUNCTION(BlueprintImplementableEvent、BlueprintCallable)

bool OnEventNew(int32 InValue);

こんな感じですね。
こちらもイベントと同様処理はBP側で記述するためC++側での実体は必要ないようです。
上記は関数になるため「BlueprintCallable」を記述しないと、BP側で呼び出すことができないので注意が必要です。

BPのみで処理がかけるので結構用途としては使う機会が多くなるのではないかと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 2023/01 の無料マーケットプレイスコンテンツと永続コンテンツ(無料の永続コンテンツはなし)

2023./01 の無料マーケットプレイスコンテンツと永続コンテンツのメモです。

公式情報はこちら。

・2023年01月の無料マーケットプレイスコンテンツ
https://www.unrealengine.com/ja/blog/featured-free-unreal-marketplace-content-january-2023

無料コンテンツについては期日がすぎると無料でなくなるので公式情報や他のサイトさんを見たほうが良いかと思います。
こちらでは永続コンテンツについてのメモを残しておきます。

と思ったのですが2023/01は無料の永続コンテンツはないようです。残念…。
とはいえ期限ありの無料コンテンツでダウンロードできるのでそれだけでもとても助かります!

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++で「FString」型の文字列をフォーマット引数を使って作成する(FString::Printf)

C++で「FString」型の文字列をフォーマット引数を使って作成する方法です。

公式ドキュメントはこちら。

・FString
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

「FString」型の文字列をフォーマット引数を扱うには「FString::Printf」関数を使います。

// フォーマット引数を使って文字列を作成
FString aPrintfString = FString::Printf(TEXT("Value = %d, Str = %s"), 123456, TEXT("Moji"));
UE_LOG(LogTemp, Log, TEXT("%s"), (*aPrintfString));


結果はこんな感じになりました。
FStringのPrintf000

通常の「printf」と使い方は同じなのでただのメモみたいなものになります。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5 C++でアクター(Actor)のルートコンポーネント(Root Component)を設定する(AActor::SetRootComponent)

C++でアクター(Actor)のルートコンポーネント(Root Component)を設定する方法です。

ルートコンポーネント(Root Component)を設定するには
「AActor::SetRootComponent」関数を使って「RootComponent」を指定できるようです。

コードはこんな感じになると思います。

// Actor
ABlogActor::ABlogActor()
{

// Component を追加
this->MeshComponent = CreateDefaultSubobject< USkeletalMeshComponent>(TEXT("MeshComponent"));
this->SetRootComponent(this->MeshComponent);
}


C++でコンポーネント(Component)を追加する場合はここらへんの設定を忘れてしまいそうなので覚えておきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5 「none of them were set as the actor's RootComponent」という「Warning」が出てしまう場合の対処方法(AActor::SetRootComponent)

「none of them were set as the actor's RootComponent」という「Warning」が出てしまう場合の対処方法です。

こちらの投稿を参考にさせていただきました。

・Warning: None of them were set as the actor’s RootComponent
https://forums.unrealengine.com/t/warning-none-of-them-were-set-as-the-actors-rootcomponent/366781

どうも「RootComponent」がないよ。という「Warning」みたいですね。
なので「RootComponent」の設定をしてあげることで解決するようです。

まずはこんな感じでコンストラクタで「Component」を追加するようなコードがあると思います。

// Actor
ABlogActor::ABlogActor()
{

// Component を追加
this->MeshComponent = CreateDefaultSubobject< USkeletalMeshComponent>(TEXT("MeshComponent"));
}

上記の実装だと「none of them were set as the actor's RootComponent」という「Warning」が出ます。

これを解決するために以下のように「AActor::SetRootComponent」関数を使って「RootComponent」を指定してあげます。

// Actor
ABlogActor::ABlogActor()
{

// Component を追加
this->MeshComponent = CreateDefaultSubobject< USkeletalMeshComponent>(TEXT("MeshComponent"));
this->SetRootComponent(this->MeshComponent);
}

こうすることで「Warning」を消すことができます。

ここらへん「Warning」のメッセージを読むだけだとどうやって対処したらいいのかがわからないので
一つ一つ覚えていくしかなさそかなと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT |