ゲーム制作雑記録 - Unreal Engine - ブループリントとC++を使う~ブループリント形式のプロジェクトにC++を追加

いざUnreal EngineでC++も使ってみようと思って公式のWebドキュメントや解説サイトや参考書を見ても、「え…全部コーディング?ビューポートは?あばばばばwww」。そして、仕方なくブループリントのみでやろうとするも、「ところで汎用関数ってどうやって作るの?」「もっと構造体みたいに使いたいんやが…」とかになったりする人もいると思います。
で、結局はC++をUnreal Engineで使おうと調べなおして、ようやく触りの部分を学べた成果を簡潔に紹介します。

今回ここでやること
まず記事のタイトルにあるように、変わらずブループリントをメインで使っていく内容です。以下、こまごまとした前提を書きますので一読を。
  • Unreal Engineのプロジェクトの形式
  • ブループリント形式で新規作成したプロジェクトで開始して、後からC++形式を追加することになります。もちろん、そのままUnrealエディタにてプループリントを使ってゲーム制作を続けることが可能です。
  • プログラミングについて
  • ここではプログラミングの解説はしませんので、ある程度の知識が必要です。ただ、全く知らなくこれから勉強したいと思っている人でも問題ありません。こちらが先でも後から本格的にC++を学ぼうとする時に、こういうことだったのかとわかると思いますので(´▽`
  • 制作環境
  • Visual Studioが導入されていることが必要です。Unreal Engine必須のライブラリを導入する過程でVisual Studioを入れている人がほとんどだと思いますが、無い人はインストールして下さい。
  • 目標
  • C++で関数を作りグラフ上で右クリックして文字入力して候補表示させて使用👍
  • 作業の流れ
  • ①プループリント形式にC++を追加(C++の新規クラスを作ろうとすると自動で行われます。)
    ②手動でC++をリビルド
    ③C++で関数作成
    ④Unreal Engineでコンパイル
    ⑤ブループリントで使用
  • 留意事項
  • 私はエディタを英語で使用しているので、日本語の表記が多少異なる場合があります。(途中で確認するのが面倒に…)
手順
  1. 新規C++クラス作成
    1. Unreal Engineのブループリント形式のプロジェクトを起動してから開始です。
    2. Unrealエディタのメニューバー「ツール」→「新規 C++ クラス」
    3. 「よく使うクラス」から「ブループリント関数ライブラリ(Blueprint Function Library)」を選択して「次へ」
    4. 該当クラスは下の方にあります。
    5. クラス名やらパスの変更は任意で「クラスを作成」
    6. これ以降デフォルトの名前で解説しています。また、パブリックかプライベートかの項目がありますが、特に選択する必要はありません。
      ここで初めてC++クラスを作成した場合は、Unrealプロジェクトフォルダの配下にフォルダやファイルがいろいろと作成されます。少し待ちましょう。しばらく待つと「プロジェクトにソースが追加されました。エディタを閉じてIDE(統合開発環境)からビルドして下さい。」旨のポップアップが表示されます。
    7. 押すしかないので「OK」ボタンを押下。
    8. そして「クラスの追加は成功しましたが、リコンパイルしないとコンテント・ブラウザには表示されません。」旨のポップアップが表示されます。さらに「コードの編集をしますか?」と聞かれていますが、その前にもビルドをする必要があるので、
    9. 「はい」ボタンを押してIDEを起動
  2. C++をリビルド
    1. Visual Studioが起動され、これまたいろいろと初回処理が動くので少し待つのですが、Unrealエディタを閉じるように言われていたので一旦Unrealエディタの方へ戻ります。そしてついでにC++クラスがコンテンツ・ドロワーで表示される設定にしていない人は表示されるようにしましょう。
    2. コンテンツ・ドロワー右上の歯車マークの「設定」をクリックして「C++クラスを表示」にチェック
    3. Unrealエディタを閉じる
    4. ここでVisual Studioに戻ります。タブには今回作成したクラスのヘッダファイルとCPPファイルの他に、「Unreal Engine統合構成」なるものも表示されています。まだ裏で何やら動いている可能性もありますが、とりあえずこのタブが表示されていれば問題ないと思われます、多分。ちなみにこれは使いません。
      右側のツリー状のソリューション・エクスプローラに「Games」フォルダがあり、その中にあなたが作ったUnrealプロジェクトの名前のものがあるので探して下さい。
    5. Unrealプロジェクト名のモジュールを右クリック
    6. メニューから「リビルド」を左クリック
    7. ビルドが開始され、Visual Studioの下部に進捗が表示されるので完了するまで待ちます。
    8. Unrealプロジェクトのファイル(~.uproject)をダブル・クリックして起動
    9. コンテンツ・ドロワーを表示させてみて下さい。コンテンツ・ブラウザ上に「C++ Classes」というフォルダがあり、その配下に作成したC++クラスがあるはずです。
  3. C++で関数作成
    1. Visual Studioでソース・コードを編集して関数を作っていきます。今回は、使用頻度のせいか累乗(べき乗,power)と違ってプログラミング言語の標準ライブラリ関数にはほぼ含まれておらず、よく関数作成例になっている階乗(factorial)を作ります。
    2. ヘッダ・ファイル編集
    3. 「MyBlueprintFunctionLibrary.h」には既に数行コードが書かれていますが、以下を参考に入力してください。IDEなのである程度文字を入力すると候補一覧が表示されるので、カーソル・キーで選択し、Tabキーで入力を確定できます。
      下三行が追加部分
      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」は無くても動くようですが…、ブループリントの段階でオブジェクト(インスタンス)化してるから?
    4. CPPファイルへ定義追加
    5. 先ほどのヘッダ・ファイルの関数宣言の部分からCPPファイルに定義を記載する部分を追加する機能があるので、そこから追加します。
      ヘッダ・ファイルの「static int factorial(int number);」行に入力カーソルを移動させると、行の左側に(スクリュー)ドライバーのアイコンが表示されるのでクリックすると、「~.cppに'factorial'の定義を作成」旨のメニューが表示されるのでそれをクリック。
    6. CPPファイル編集
    7. 「MyBlueprintFunctionLibrary.cpp」に実際の関数の中身を書いていきます。
      再起呼び出しを使用しても問題ありません。というかやったことないけどブループリントの関数でもできるのかな?
      int UMyBlueprintFunctionLibrary::factorial(int number)
      {
      	if (number > 0) {
      		return number * factorial(number - 1);
      	}
      	return 1;
      }
      編集が終わったら、上部ツールバーの💾が2重になっているアイコンをクリックして全てセーブします。
  4. Unreal Engineでコンパイル
  5. Unrealエディタの右下のブロックのようなアイコンをクリックし、リコンパイル。
    なお、レベルマップの画面を表示させないと表示されません。
    (上部メニューには無いし、ちっちゃいアイコンだし、なんでこんなに目立たないようにしてるんや)
    少し時間がかかるので完了するまで待機。
  6. ブループリントで使用
  7. 作成した関数がブループリントのグラフ上でいつものように使えます。実際にやってみましょう。
    ↓ちゃんとコードに記載したカテゴリ「My Function」内に今回作成した関数が出てきてます。
    テンプレートのキャラクターにでも追加して…
    5の階乗の結果が表示できました。

→「ゲーム制作雑記録」トップ・ページへ