初めに
みなさんあけましておめでとうございます!ロジカルビート情熱開発部プログラム課の金澤です!
年も明けてしばらく経ち仕事や学校が始まった方も多いのではないでしょうか?
私も今年はバリバリとプログラムを書けるように頑張っていきたいと思います!
さて今回は「いまさら聞きづらいUPROPERTY・UFUNCTION」と題するように、これからUnrealC++を学んでいく方へわかりやすくUPROPERTY・UFUNCTIONについて解説していこうと思います。
補足
UPropertyですが、UE4.25よりFPropertyにリファクタリングされており現在は置き換えを推奨されています。
そのため今回のブログについてもそれ以前のバージョンを対象としています。ご了承ください。
FPropertyについて詳しくはこちらをご覧ください。
今回説明するUPROPERTYとUFUNCTIONって?
まずそもそも今回説明するUPROPERTYとUFUNCTIONがどれのことを指しているのかを説明したいと思います。
みなさんUE4でプログラムを書いている際にこんな記述を見たことはないでしょうか?
変数や関数の上になにかマクロがありますね。それが今回説明するUPROPERTYマクロとUFUNCTIONマクロになります。
UPROPERTYマクロ
UPROPERTYマクロとは変数宣言の上の行に入れることでプロパティ指定子とメタデータ指定子を定義することができるマクロです。
UPROPERTY( プロパティ指定子, メタデータ )
Type hogeValue;
上記のように記述することでhogeValueに色々な設定を追加することができます。
では具体的にプロパティ指定子やメタデータで何ができるかを説明していきます。
プロパティ指定子とは
プロパティ指定子とはプロパティがエンジンとエディターのさまざまな側面でどのように動作するかを制御できるものになります。
どんなものがあるかというと
指定子 | 効果 |
---|---|
EditAnywhere | レベルエディターおよびブループリントエディター上での閲覧・編集が可能 |
EditDefaultsOnly | ブループリントエディター上での閲覧・編集が可能 |
EditInstanceOnly | レベルエディター上での閲覧・編集が可能 |
VisibleAnywhere | レベルエディターおよびブループリントエディター上での閲覧のみが可能 |
VisibleDefaultsOnly | ブループリントエディター上での閲覧のみが可能 |
VisibleInstanceOnly | レベルエディター上での閲覧のみが可能 |
AdvancedDisplay | その変数をカテゴリの下に詳細設定として隠す |
EditFixedSize | この配列の要素数の変更を禁止する |
BlueprintReadOnly | ブループリントエディター上でGetのみ公開 |
BlueprintReadWrite | ブループリントエディター上でGet・Setの両方を公開 |
Category = “TopCategory|SubCategory|…” | ブループリントエディター上で表示される際のプロパティのカテゴリを設定 |
などなど
ほかにももっと多くのプロパティ指定子がありますが、きりがないのでよく使いそうな部分だけをピックアップしてみました。
もっと気になる方は公式サイトに全て載っているのでそちらをご覧ください。
また、プロパティ指定子は一つだけでなく複数の指定をすることも可能です。
そのため
UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "TestProject")
float hogefloat;
のように記述すれば、複数の設定を行うことができます。
メタデータ指定子とは
次にメタデータについて説明していきます。
メタデータ指定子とは関数やプロパティの宣言時に追加することでエディタ上で様々な動作を制御できるものです。
メタデータを使用する際に注意すべき点として、宣言時に使える型が違うということです。
つまりUPROPERTYで使う時とUFUNCTIONで使う時に使えるものと使えないものがあるということです。
もちろんどちらでも使用可能なものもあるので、すべてを知りたい方は公式サイトをチェックしてみてください。
UFUNCTIONマクロ
UFUNCTIONマクロもUPROPERTYマクロと同様に、今度は関数宣言の上の行に入れることで関数指定子とメタデータ指定子を定義することができるマクロです。
UFUNCTION( 関数指定子, メタデータ )
ReturnType HogeFunction();
上記のように記述もUPROPERTYとほぼ変わりません。また、こちらも複数設定することができます。
関数指定子
関数指定子もプロパティ指定子と同様にエディタ上で関数がどのように動作するかを制御するためのものになります。
関数指定子 | 説明 |
---|---|
BlueprintCallable | ブループリント上で呼び出し可能になる |
BlueprintPure | ブループリント上で実行ピンを持たないノードとして呼び出し可能になる |
BlueprintImplementableEvent | C++クラス側の実装はなく、ブループリント上でイベントとして呼び出し可能になる |
BlueprintCallableEvent | ブループリント上でイベントとして呼び出し可能になる |
BlueprintNativeEvent | 後述 |
Category = “TopCategory|SubCategory|…” | ブループリント上で表示される際のプロパティのカテゴリを設定 |
BlueprintNativeEventですが、これはC++で処理を書きたい場合_Implementation
をつけた関数を実装する必要があります。
UFUNCTION(BlueprintNativeEvent)
void HogeFunc();
virtual void HogeFunc_Implementation();
このように記述してcppには_Implementation
をつけたほうの関数のみ実装する必要があります。
そうすることでブループリントのイベントグラフ内でオーバーライドすることができるようになります。
関数指定子もこれで全てではないためもっと知りたい方は公式サイトをご覧いただければと思います。
まとめ
さて今回はUPROPERTYとUFUNCTIONに絞ってご説明させていただきましたが、このほかにもUSTRUCT、UCLASS、UENUM…など沢山の制御マクロがあります。
ですがこれら全てを覚えることは難しいため、今回紹介していったものから少しずつ実際に使いながら楽しく覚えていっていただければ私としても今回このブログを書いた意味があるのではと思います。
ここまでの御清覧ありがとうございました。
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。