アンリアる! C++入門編 ~対話形式で学ぶUnreal Engine~
BOOTHでUnreal Engine C++入門書を販売していますUnreal Engine上でC++を使って開発するために必要となる基礎知識を一冊の本にまとめた本です。 対話形式によるわかりやすい説明を目指しました。無料の試し読みも可能ですので、ぜひ読んでみてください!
[UE5] C++とBlueprintのメリット・デメリット

UnrealEngineでActorやComponentなどを実装するとき、Blueprintを使う人は多いでしょう。
しかし、Bluerpintでできることは、すべてC++でも実装できます
C++にはさまざまなメリットがあり、C++を利用することで、Blueprintでは実現できないことが実現可能になります。
反面、C++にもデメリットがあり、双方をうまく使い分けることが、UnrealEngineの開発効率につながります。

そこで、本記事では、BlueprintとC++のメリット・デメリットについて、筆者の経験をもとに紹介します。

BlueprintとC++の関係

BlueprintはUnrealEngineの代表的なシステムの1つです。
ビジュアルスクリプティングにより、ノーコードで直感的に開発作業ができます。
内部的には、作成されたBlueprintが自動的にコードに変換され、変換されたコードを元にゲームが動作します。

Blueprintのしくみ

UnrealEngineはC++で実装されていて、本来であれば、C++でプログラミングを行う必要があります。
しかし、UnrealEngineにはBlueprintのシステムがあるおかげで、C++でプログラミングを行うことなく開発作業ができます。
したがって、BlueprintはC++で作成するコードを直感的に編集できるようにしたシステムと言えます。

ただし、そのBlueprintを使わず、直接C++のコードを記述する方法でも実装できます。
そして、C++には、Blueprintはない、多くのメリットがあります。

Blueprintのメリット/C++のデメリット

まず、Blueprintを利用するメリットを紹介します。
これらは逆に、C++を利用するときにはデメリットともなるものです。

理解のしやすさ

Blueprintにおける1つ目のメリットは、直観的に理解しやすいという点です。
Blueprintでは、ビジュアルスクリプティングにより、ノーコードで直感的に処理を作成できます。

一方C++では、決められたルールに従ってコードを記述する必要がありますが、そのルールの理解が必要となります。
さらに、UnrealEngineのC++では、UnrealEngine独自の記述方法も理解する必要があり、さらに敷居を高くしています。

Blueprintのメリットその1

コンパイル時間の短さ

Blueprintにおける2つ目のメリットは、コンパイルが高速という点です。
Blueprintでは、エディタ上でコンパイルボタンを押すとコンパイルを実行され、即座に完了します。
処理を修正して試す、といった検証作業をすばやく繰り返すことができます。
(※ただし、規模次第では長くなります。)

一方C++では、Blueprintよりも時間がかかります。
さらに、コンパイルするためにはUnrealEngineを再起動する必要があるため、Blueprintと比べると時間がかかります。
(※C++のコンパイルの手法があり、短時間で終わり、再起動が不要な手法があります。)

Blueprintのメリットその2

名前変更のしやすさ

Blueprintにおける3つ目のメリットは、変数名やアセット名など、データの名前を変更しやすいことです。
名前を変更しても、自動的につじつまが合うよう処理してくれるため、気軽に変更できます。

一方C++では、自動的に処理してくれないため、名前の変更は慎重に行う必要があります。
名前の変更により、正しく動作しなくなったり、コンパイルに失敗したりする場合があります。
たとえば関数名を変更すると、その関数を使っていた処理でエラーが発生し、手動での修正が必要となります。
(※C++でも名前変更に対応するしくみが用意されています。ただし、名前を変更するときには特別な操作が必要となる
ため、C++におけるデータ名の変更は注意しなければなりません)

Blueprintのメリットその3

異常終了の発生しにくさ

Blueprintにおける4つ目のメリットは、UnrealEngineで異常終了する可能性が低いことです。
UnrealEngineが提供しているBlueprintのノードは、高品質に作られているため異常終了しにくいです。
たとえ作成した処理にバグがあった場合でも、異常終了することなく、エラーの内容を表示してくれるように作られていることが多いです。

一方C++を用いると、バグがあった場合に予期せず異常終了する可能性が高くなります。
異常終了するとエラーメッセージが表示されてUnrealEngineが強制終了され、編集中のデータが失われてしまいます。
エラーチェック漏れなど、単純なバグでも異常終了する可能性があります、

Blueprintのメリットその4

Blueprintのデメリット/C++のメリット

ここが本題で、C++を利用するメリットを紹介します。
これらは逆に、Blueprintを利用するときにはデメリットともなるものです。

利用可能な機能の豊富さ

Blueprintにおける1つ目のデメリットは、UnrealEngineの一部機能しか利用できないことです。
たとえば、エディタ上で値を編集できる変数には、編集可否が条件によって切り替わるものがあります。
このような機能を持った変数は、Blueprintでは実装できません。

一方C++であれば、UnrealEngineの機能を最大限利用可能です。
UnrealEngineエディタ上で実装されているものは、C++を用いればほぼすべて実現できます。
また、独自のアセットを作成したり、エディタの仕様を変更したりするなど、高度な機能拡張や改造もC++では実現可能です。
さらに、UnrealEngineのソースコードはすべて公開されています。

C++のメリットその1

処理の理解しやすさ

Blueprintにおける2つ目のデメリットは、視認性が悪く、処理全体が理解しにくいことです
ノードのUIは画面上に占める割合が大きいため、画面上で確認できる処理量は少なくなります。
複雑な処理になるほどノードの数が多く、画面を移動する操作が必要となり、全体像が理解しにくくなります。
また、処理が複数の画面やアセットファイルに分散する場合が多く、そのことも視認性が悪くなる原因です。

一方C++では、文字ベースで処理を記述するため、1つの画面内に多くの情報を表示できます。
また、関連処理を1つのファイルに集約でき、Blueprintと比べると可読性を高くするための工夫はしやすいです。

C++のメリットその2

一括編集のしやすさ

Blueprintにおける3つ目のデメリットは、一括編集が難しいことです。
たとえば、変数の名前やデータ型をまとめて変更したいというような場合、エディタ上のUIで個々に編集する必要があります。
一括で編集できる機能が用意されている場合がありますが、必ずしもそのような機能があるとは限りません。
その場合は手作業で1つずつ編集する必要があります。

一方、C++は文字データであるため、パターンマッチングによる一括編集が容易です。
たとえば、変数の名前やデータ型をすべて変更したいというような場合は、文字列を置き換えるだけで一括編集できます。

C++のメリットその3

処理がブラックボックス化されていない

Blueprintにおける4つ目のデメリットは、処理がブラックボックスであるため、実装方法によっては意図せず動作が遅くなる可能性もあることです。
ノードの処理がブラックボックス化されていて、内部で行われている詳細な処理がわからないためです。
仮にわかったとしても、Blueprintでは内部処理に対して変更を加えることはできないので、処理を軽くするのには限界があります。

一方C++では、ソースコードを解析することで、処理の内容を深堀りでき、ボトルネックの処理を特定できます。
また、C++の場合、どのような処理が行われているかはBlueprintに比べるとわかりやすいです。
上から順に処理が呼ばれるため、処理内容がすぐにわかります。

C++のメリットその4

まとめ

BlueprintとC++はそれぞれメリットとデメリットがあるため、一方のみを使うのではなく、両方を適切に使い分けることが大切です。
両方のメリットを活かして開発作業を行うことが、作業の効率化につながります。

Blueprintはコンパイルが速い、名前が変更しやすいなどのメリットがあります。
そのため、Blueprintは短期的な検証や、仕様変更の多い末端機能の実装に向いているといえます。

一方、C++は利用できる機能が多い、可読性が高いなどのメリットがあります。
そのため、C++は長期的な維持・管理が必要な処理や、複雑な処理の多い根幹部分の機能実装に向いているといえます。

C++のメリットとして特に注目すべきなのが、UnrealEngineのほぼすべての機能を使用できるという点です。
Blueprintでは実現できないことを、C++では実現できることがたくさんあります!
一方で、一般的なC++の理解に加えて、UnrealEngine独自の記述方法を理解する必要があるため、敷居の高さが最大のデメリットです。

【宣伝】
UnrealEngine独自の記述方法を理解することを目的として、UnrealEngineC++の入門書をBoothで販売しています。
C++の知識がない方でも理解できるように、基礎から対話形式でわかりやすく説明しています。

UEC++入門書

なお、Unreal EngineでC++を導入する方法は、以下の記事にまとめています。

[UE5] C++の導入方法
本記事では、Unreal EngineでC++を導入する方法と、C++ヘッダファイル・ソースファイル(C++クラス)を追加する方法を説明します。