前回はiOS10で新規に追加されたフレームワークについてご紹介いたしました。
今回は以前紹介したUnrealEngineの続きになります。
機能的に調査している段階ですが、今回はBluePrintではなく、C++のことについて紹介します。
ただ単純にC++だけですと特に紹介はしなくてもいいですが、UnrealEngineで用意されているクラスやマクロでかなり苦戦しています。
ビルドを通すだけでもエラーがたくさん出てしまいかなり時間がかかりました…
また、不要になったファイルの削除方法も少し特殊な手順を踏まなければいけません。
詳しくは下記URLを参考にしてください。
こちら
さて、本題に戻りますが、今回なぜC++を選んだかといいますと
C++からコンポーネント(例えばWidgetBlueprint=UIを作成するためのコンポーネント)を生成する方法がなかなか見つからなかったので
自分の中でもこの方法が分かればいろいろと汎用化等、開発の速度もあげられると思ったので調べてみました。
※BluePrintでは簡単に生成できるが生成するための箱(CeateWidgetノード)がWidgetBlueprintに対して1:1のため、
その場で複数のUMGを使いたい場合、その分の箱を用意しなくてはなりません。
下記がその例になりますが、CreateWidgetにLoadingWidgetを選択しています。
調査した結果、下記のフォーラムがありましたのでこちらを参考に生成するクラスを作成してみました。
ただし、英語表記ですので翻訳ツールを駆使しながら作成していきました。
こちら
それでは初めにC++クラスの作成から説明していきます。
メニュー->新しいC++クラスの作成を押します。
すると、いくつかのクラス一覧が表示されると思います。
ここはどのクラスを継承してクラスを作成するかを選択できるところになります。
参考にしたURLではUMGのベースとなるUserWidgetとPlayerControllerの二つを使用しています。
真似をして作成してきましょう。
ソースコード自体は省略しますが、いろいろUnrealEngine独自のメタデータなどが追加されているので
それらは下記のURLを見ていただくとわかります。
こちら
エラーもなく、コンパイルが通りましたら
UserWidgetを継承したクラスを実際にUMGのClassOptionsに適用しましょう。
※UMGの作成方法については省略します。
あとはPlayerControllerを継承したクラスは適当なObjectを作成した後、
AddBluePrintでUserWidgetと同じようにClassOptionsに適用します。
そのあと、ClassDetailsに設定したUMGを追加して再生してみたのですが
停止をするとWidgetを作成するところでエラーが発生しました。
「CreateWidget cannot be used on Player Controller with no attached player.」
おそらく、PlayerControllerを継承したクラスの利用方法に問題があって、エラーが発生している可能性があるので、
引き続き原因を調査していきたいと思います。
モヤモヤ感があると思いますが今回は一旦ここまでとします。 最後までご覧いただきありがとうございます。
弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。