UE5/UE4 C++とBPの両方でオーバーライド(Override)できる関数を作成する(UFUNCTION(BlueprintNativeEvent)、UFUNCTION(BlueprintCallable)、_Implementation)
C++とBPの両方でオーバーライド(Override)できる関数を作成する方法です。
こちらのサイトを参考にさせていただきました。
・仮想関数まわり、NativeEvent関数のオーバーライドについて
https://miyahuji111.hatenablog.com/entry/2017/03/31/085842
やりたいこととしては「C++でオーバーライドできる関数」なおかつ「BPでオーバーライドできる関数」となります。
参考サイトさんをもとに実際やってみました。
まずはC++で関数を定義します。
定義した関数の下に「virtual」を頭につけ、関数名の後ろに「_Implementation」を付けた関数を定義します。
こちらはC++側に実態が必要になり、C++でのオーバーライドされた関数となるようです。
※「関数名 + _Implementation」はUE側で自動的に紐づけられるようです。
C++での関数の実体はこんな感じで書きました。
これを実行するとBPで上記で定義した関数をオーバーライド(Override)することができます。

こんな感じで「関数」の「オーバーライド(Override)」から関数を選択して作成することができます。
BPでオーバーライドされた関数はこんな感じになりました。

最後にC++側で実行してみます。
C++で処理も行いたいが、BP側で特殊な処理をしたい。
といったもので結構使うことがありそうなので、記述の仕方など覚えておきたいと思いました。
こちらのサイトを参考にさせていただきました。
・仮想関数まわり、NativeEvent関数のオーバーライドについて
https://miyahuji111.hatenablog.com/entry/2017/03/31/085842
やりたいこととしては「C++でオーバーライドできる関数」なおかつ「BPでオーバーライドできる関数」となります。
参考サイトさんをもとに実際やってみました。
まずはC++で関数を定義します。
まずは「UFUNCTION(BlueprintNativeEvent, BlueprintCallable)」を使って関数を定義します。// C++ と BP でオーバーライドできる関数の定義
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
int32 OverrideFunction(float InValue); //!< 作りたい関数
virtual int32 OverrideFunction_Implementation(float InValue); //!< C++でオーバーライドする関数
定義した関数の下に「virtual」を頭につけ、関数名の後ろに「_Implementation」を付けた関数を定義します。
こちらはC++側に実態が必要になり、C++でのオーバーライドされた関数となるようです。
※「関数名 + _Implementation」はUE側で自動的に紐づけられるようです。
C++での関数の実体はこんな感じで書きました。
// オーバーライドするC++の関数
int32 OverrideFunction_Implementation(float InValue)
{return (0);}
これを実行するとBPで上記で定義した関数をオーバーライド(Override)することができます。

こんな感じで「関数」の「オーバーライド(Override)」から関数を選択して作成することができます。
BPでオーバーライドされた関数はこんな感じになりました。

最後にC++側で実行してみます。
結果をみてると「C++で定義した関数」と上記「BPの関数」両方が実行されるのがわかります。int32 aValue = OverrideFunction(0.0f);
C++で処理も行いたいが、BP側で特殊な処理をしたい。
といったもので結構使うことがありそうなので、記述の仕方など覚えておきたいと思いました。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑