ゲーム制作雑記録 - Unreal Engine - ブループリントとC++を使う~ブループリント形式のプロジェクトにC++を追加
いざUnreal EngineでC++も使ってみようと思って公式のWebドキュメントや解説サイトや参考書を見ても、「え…全部コーディング?ビューポートは?あばばばばwww」。そして、仕方なくブループリントのみでやろうとするも、「ところで汎用関数ってどうやって作るの?」「もっと構造体みたいに使いたいんやが…」とかになったりする人もいると思います。
で、結局はC++をUnreal Engineで使おうと調べなおして、ようやく触りの部分を学べた成果を簡潔に紹介します。
→「ゲーム制作雑記録」トップ・ページへ
で、結局はC++をUnreal Engineで使おうと調べなおして、ようやく触りの部分を学べた成果を簡潔に紹介します。
今回ここでやること
まず記事のタイトルにあるように、変わらずブループリントをメインで使っていく内容です。以下、こまごまとした前提を書きますので一読を。
- Unreal Engineのプロジェクトの形式
- プログラミングについて
- 制作環境
- 目標
- 作業の流れ
- 留意事項
ブループリント形式で新規作成したプロジェクトで開始して、後からC++形式を追加することになります。もちろん、そのままUnrealエディタにてプループリントを使ってゲーム制作を続けることが可能です。
ここではプログラミングの解説はしませんので、ある程度の知識が必要です。ただ、全く知らなくこれから勉強したいと思っている人でも問題ありません。こちらが先でも後から本格的にC++を学ぼうとする時に、こういうことだったのかとわかると思いますので(´▽`
Visual Studioが導入されていることが必要です。Unreal Engine必須のライブラリを導入する過程でVisual Studioを入れている人がほとんどだと思いますが、無い人はインストールして下さい。
①プループリント形式にC++を追加(C++の新規クラスを作ろうとすると自動で行われます。)
②手動でC++をリビルド
③C++で関数作成
④Unreal Engineでコンパイル
⑤ブループリントで使用
②手動でC++をリビルド
③C++で関数作成
④Unreal Engineでコンパイル
⑤ブループリントで使用
私はエディタを英語で使用しているので、日本語の表記が多少異なる場合があります。(途中で確認するのが面倒に…)
手順
- 新規C++クラス作成
- Unrealエディタのメニューバー「ツール」→「新規 C++ クラス」
- 「よく使うクラス」から「ブループリント関数ライブラリ(Blueprint Function Library)」を選択して「次へ」 該当クラスは下の方にあります。
- クラス名やらパスの変更は任意で「クラスを作成」 これ以降デフォルトの名前で解説しています。また、パブリックかプライベートかの項目がありますが、特に選択する必要はありません。
- 押すしかないので「OK」ボタンを押下。 そして「クラスの追加は成功しましたが、リコンパイルしないとコンテント・ブラウザには表示されません。」旨のポップアップが表示されます。さらに「コードの編集をしますか?」と聞かれていますが、その前にもビルドをする必要があるので、
- 「はい」ボタンを押してIDEを起動
- C++をリビルド
- コンテンツ・ドロワー右上の歯車マークの「設定」をクリックして「C++クラスを表示」にチェック
- Unrealエディタを閉じる ここでVisual Studioに戻ります。タブには今回作成したクラスのヘッダファイルとCPPファイルの他に、「Unreal Engine統合構成」なるものも表示されています。まだ裏で何やら動いている可能性もありますが、とりあえずこのタブが表示されていれば問題ないと思われます、多分。ちなみにこれは使いません。
- Unrealプロジェクト名のモジュールを右クリック
- メニューから「リビルド」を左クリック ビルドが開始され、Visual Studioの下部に進捗が表示されるので完了するまで待ちます。
- Unrealプロジェクトのファイル(~.uproject)をダブル・クリックして起動 コンテンツ・ドロワーを表示させてみて下さい。コンテンツ・ブラウザ上に「C++ Classes」というフォルダがあり、その配下に作成したC++クラスがあるはずです。
- C++で関数作成
- ヘッダ・ファイル編集
- CPPファイルへ定義追加
- CPPファイル編集
- Unreal Engineでコンパイル
- ブループリントで使用
-
Unreal Engineのブループリント形式のプロジェクトを起動してから開始です。
ここで初めてC++クラスを作成した場合は、Unrealプロジェクトフォルダの配下にフォルダやファイルがいろいろと作成されます。少し待ちましょう。しばらく待つと「プロジェクトにソースが追加されました。エディタを閉じてIDE(統合開発環境)からビルドして下さい。」旨のポップアップが表示されます。
-
Visual Studioが起動され、これまたいろいろと初回処理が動くので少し待つのですが、Unrealエディタを閉じるように言われていたので一旦Unrealエディタの方へ戻ります。そしてついでにC++クラスがコンテンツ・ドロワーで表示される設定にしていない人は表示されるようにしましょう。
右側のツリー状のソリューション・エクスプローラに「Games」フォルダがあり、その中にあなたが作ったUnrealプロジェクトの名前のものがあるので探して下さい。
-
Visual Studioでソース・コードを編集して関数を作っていきます。今回は、使用頻度のせいか累乗(べき乗,power)と違ってプログラミング言語の標準ライブラリ関数にはほぼ含まれておらず、よく関数作成例になっている階乗(factorial)を作ります。
「MyBlueprintFunctionLibrary.h」には既に数行コードが書かれていますが、以下を参考に入力してください。IDEなのである程度文字を入力すると候補一覧が表示されるので、カーソル・キーで選択し、Tabキーで入力を確定できます。
下三行が追加部分
最後のfactorial(階乗)の記載があるところが関数の宣言です。なお、ブループリントで使うという性質上、引数(入力)や戻り値(出力)の型に制限があります。整数型では「int」と「int64」で、「unsigned」は使えません。どうやら「static」は無くても動くようですが…、ブループリントの段階でオブジェクト(インスタンス)化してるから?
下三行が追加部分
class BPFUNCLIB_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintPure, Category = "MyFunction") static int factorial(int number); };「UFUNCTION」はUnreal Engine用のマクロ定義です。固有のもので、Unreal Engineでコーディングする際のお作法的なものです。「BlueprintPure」はブループリントのグラフ上で、ノード同士を白い線で結ぶ必要がない関数に指定するものです。大抵緑色のやつですね。
最後のfactorial(階乗)の記載があるところが関数の宣言です。なお、ブループリントで使うという性質上、引数(入力)や戻り値(出力)の型に制限があります。整数型では「int」と「int64」で、「unsigned」は使えません。どうやら「static」は無くても動くようですが…、ブループリントの段階でオブジェクト(インスタンス)化してるから?
先ほどのヘッダ・ファイルの関数宣言の部分からCPPファイルに定義を記載する部分を追加する機能があるので、そこから追加します。
ヘッダ・ファイルの「static int factorial(int number);」行に入力カーソルを移動させると、行の左側に(スクリュー)ドライバーのアイコンが表示されるのでクリックすると、「~.cppに'factorial'の定義を作成」旨のメニューが表示されるのでそれをクリック。
ヘッダ・ファイルの「static int factorial(int number);」行に入力カーソルを移動させると、行の左側に(スクリュー)ドライバーのアイコンが表示されるのでクリックすると、「~.cppに'factorial'の定義を作成」旨のメニューが表示されるのでそれをクリック。
Unrealエディタの右下のブロックのようなアイコンをクリックし、リコンパイル。
なお、レベルマップの画面を表示させないと表示されません。
(上部メニューには無いし、ちっちゃいアイコンだし、なんでこんなに目立たないようにしてるんや)
少し時間がかかるので完了するまで待機。
なお、レベルマップの画面を表示させないと表示されません。
(上部メニューには無いし、ちっちゃいアイコンだし、なんでこんなに目立たないようにしてるんや)
少し時間がかかるので完了するまで待機。
→「ゲーム制作雑記録」トップ・ページへ