[ブループリントvsC++]どっちでゲーム開発する?UE5のプログラミングについて1から解説
今回はUnrealEngineのプログラミングを初心者の方向けに1から解説していき、UnrealEngineのプログラミング方法「ブループリント」と「C++」の二つについて解説していきます。
このページではUE5のプログラミングとはどんなものなのか?二つあるプログラミング言語「ブループリント」と「C++」の違いや、まず最初はどっちを使うべきのかなどを解説していきます。
まずUnrealEngineでのプログラミングとは?
まずそもそも「プログラミング」について解説すると、プログラミングとは機能を作ることです。例えばスマホやPC、ゲームなどはプログラミングによってプログラム(機能)を作る事によって動いています。具体的に挙げるとLINEで文字や画像を送信する事も、パソコンでスクロールすると画面が移動したり、スマホで電源ボタンを押したら電源が付いたりなどのプログラム(機能)を書いて作る事をプログラミングと言います。
ではUnrealEngineのゲーム開発でいう「プログラミング」とは何を具体的に指しているのでしょうか?UnrealEngineでプログラミングを行うと「ゲームを動かす」事ができるようになります。例えばゲームの中でキャラを操作できるようにしたり、画面上でアイテムを使用ボタンをクリックするとアイテムが使用できたり、後はゲームクリアやゲームオーバー判定など様々な機能をプログラミングによって作る事ができます。なのでゲームを作る上でプログラミングは欠かせない重要な要素になります。
「プログラミングなしでゲームは作れない?」という質問をよくみかけるのですが、プログラミングなしでゲームを作る事はできません。これは他のゲームエンジンでも同じです。(たまにプログラミングなしでゲームが作れる!と書いてある記事を見かけますが、ゲームっぽいものは作る事はできるかもしれませんが、皆さんが普段遊んでいるようなゲームはプログラミングなしで作る事はできません)
プログラミング未経験だけど大丈夫?
プログラミングはやった事無い方からすればハードル高く感じやすいですが、勉強すればどんな方でも誰でもできるようになります。私自身も未経験から独学でプログラミングを学んで身でゲーム開発してきたのでその点は心配ないと思います。ただし好きか苦手かは別れるのでそこは実際にやってみないとわからないですね。この本でもブループリントを使ったゲーム開発について1からプログラミング未経験者の方向けに解説しているのでぜひチャレンジしてみてください。
😺個人的にはプログラミングは楽しいものだと思っているので学ぶ際はぜひその楽しさを見出して頂ければと思います!
プログラミング(ブループリント)でゲームの機能を作る様子を見てみよう
では最初にブループリントでプログラミングしてゲームに機能を作成する様子をまずはお見せしたいと思います。今回は下の動画でクリスタルのようなオブジェクトを回転させる機能をプログラミングによって1から実装してみました↓(20秒ぐらいです)
ブループリントによってアイテムを回転する機能が追加されたのが確認できます。では、上の動画で実際にどんな事をしたのか一個一個手順を確認していきます。- まず最初にゲームをプレイした時点ではクリスタルは回転していません。これはただの3Dモデルで何も機能を持っていないからです。
- ブループリントと呼ばれるグラフを繋いでいくプログラミングによって、回転させる機能を作りました。これは↓勉強すれば理解できるようになります。簡単に説明すると「アイテムを常に回転させる」という意味の機能になります。
- ブループリントを作成できたのでこれで再度ゲームをプレイしてみるとアイテムが回転するようになりました↓
最初は動かなかったアイテムがブループリントのプログラミングによって回転するようになりました。これが「プログラミング」にあたり、回転するというプログラム(機能)をつけたという事になります。
😺ゲームの機能を作る = プログラミングです。そしてUnrealEngineは二つのプログラミングの方法があるので紹介していきます。
UnrealEngineのプログラミングの方法は2つある
UnrealEngineではプログラミング方法は「ブループリント」と「C++」の二つがあります。つまり二つの方法があるという事はゲームの作り方が二種類あるという事です。そして先に結論を言ってしまいますが、まず最初はブループリントを学びブループリントでゲーム開発できるよう目指す事をおすすめします。その後さらにUE5でのゲーム開発を極めたいという方はC++を学んでいって最終的にはC++とブループリント両方でゲーム開発できるようにするという流れがおすすめです。
😺その理由やブループリントとC++の違いについて解説していこうと思います。まずはブループリントから紹介していきます。
ブループリントとは?
ブループリントとはグラフを繋げる事によってゲームの機能を作るプログラミング方法です。
先ほどのYouTubeの動画の中でもブループリントでアイテムを回転させる機能をつくりました↓
ブループリントは直感的でとても簡単、実装が速いのが特徴です。ではブループリントの仕組みについて少し紹介します。
✓ブループリントの仕組みを簡単に紹介
動画で紹介したアイテムを回転させたブループリントについてどういう仕組みなのか簡単に説明します。
ブループリントではノードと呼ばれるグラフを白い線(ワイヤー)で繋げて処理を作っていきます。左の「イベントTick」というノード(赤色のグラフ)は「常にこのノード(グラフ)につなげた処理を実行する」という機能を持ったもので、右の「Add Actor Local Rotatation」というノード(グラフ)は「アイテムを回転させる」という機能を持ったものになっています。この二つのノードをワイヤー(白い線)で繋ぐ事で「常にアイテムを回転させる」という機能になります。こうしてブループリントでプログラミングを行い、ゲームをプレイするとアイテムが回転するようになるといった仕組みになっています↓
ブループリントに関しては簡単な機能であればとてもシンプルなので実際に作った方が理解しやすいと思います。なお作り方に関してはこの本の三章からでも紹介しています。
こうやってノードを繋げてゲームの機能を作成する方法がブループリントになります。ブループリントのようなグラフ方式でプログラミングを行う事を「ビジュアルスクリプティング」と呼びます。
※ビジュアルスクリプティングとは?
ビジュアルスクリプティングはテキスト(コード)ではなくグラフ方式で行うプログラミングです。ビジュアルスクリプティングで有名なものに教育を目的としたサービス「Scratch」があります↓
それぞれの機能を持ったグラフを組み合わせる事によってプログラミングを行っていきます。このようにビジュアルスクリプティングは直感的に操作しやすいため、比較的簡単に使用できます。ただしプログラミングの仕組みとしては一般的なプログラミングと何ら変わりません。
😺ブループリント = ビジュアルスクリプティングで簡単なプログラミングの事です。このブループリントだけで本当にゲームは作れるのでしょうか?答えはYESで、ブループリントのみでゲームを作る事ができます。しかしながらブループリントではできない事もあり、実際のゲームではブループリントとC++両方が使用されているケースが一般的と聞きます。それは後ほど解説するとして次にもう一つのプログラミング言語「C++」を見ていきましょう。
C++とは?もう一つのプログラミングについて
C++とはテキスト(コード)で書くプログラミングになります。
ブループリントと同じくゲームの機能を作成する事ができ、先ほどブループリントで作ったアイテムを回転させる機能もC++で作る事ができます。実際にC++で作る様子もYoutubeで見てみましょう。ブループリントと同じアイテムを回転する機能をC++によって作成しています↓
このように同じ機能をブループリントでもC++でも作る事ができます。C++の特徴はブループリントと比べると直感的ではなく難しいです。一文字でも間違えたらエラーになって正常に機能しなくなるため初心者にとってはかなりハードルが高い物になります。ただしC++はパフォーマンスがブループリントより良かったり、ブループリントでは作れないゲームエンジンのコアに関わる機能まで作る事ができます。
😺ではC++について簡単に仕組みを紹介していきますが、既にブループリントでゲームを開発する事を決めている方はここはスキップしても構いません。
✓C++の仕組みを簡単に紹介
では、上のYouTubeの動画でアイテムを回転させるために作成したコード(テキスト)の意味について簡単に解説します↓
画像で言う赤枠の部分がアイテムを回転する機能なので、そこを解説していきます(下のコードが赤枠の部分のテキストです)。最初は訳がわからないかと思いますが勉強すれば理解できるようになっていきます。
void ARotationItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FQuat QuatRotation = FQuat(FRotator(0.f, 1.0f, 0.f));
AddActorLocalRotation(QuatRotation, false, 0, ETeleportType::None);
}
では、解説します。
- まずは以下のコードの中にTickと書かれていて鍵括弧{}がありますが、この鍵括弧の中に書いた処理は「ゲーム中、常に実行」されます。つまり以下のコードは常に何かの処理を実行するために必要なコードという事です。例えばゲーム中にステージをずっと移動させたい場合や回転させたい場合に使用します。
void ARotationItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
- さらに下の別のコードでは「アイテムを回転させる」という処理が書いてあります。
FQuat QuatRotation = FQuat(FRotator(0.f, 1.0f, 0.f));
AddActorLocalRotation(QuatRotation, false, 0, ETeleportType::None);
- 1の鍵括弧の中に2のコードを入れて以下のようになりました。これで「常にアイテムを回転させる機能」の出来上がりです。
void ARotationItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FQuat QuatRotation = FQuat(FRotator(0.f, 1.0f, 0.f));
AddActorLocalRotation(QuatRotation, false, 0, ETeleportType::None);
}
- ゲームをプレイしてみるとブループリントと同じようにアイテムが回転するようになりました。
こんな感じにコードを作っていく事でゲームの機能を追加していく形になります。なのでブループリントでもC++でも流れは同じで、大きく捉えれば、ただプログラミングの作り方が違うという感じになります。なんとなくC++はこういうものなんだなとイメージを掴めてもらえればオッケーです。
😺C++ = テキスト(コード)ベースのプログラミングです。見ての通り簡単そうなのはブループリントで、難しそうなのはC++ですが仕組み自体は一緒です。ではこれからブループリントとC++の違いについて解説していきます。
二つの言語は同じ機能を実装できる
紹介したようにブループリントでもC++でも同じ機能を作る事ができます。以下のようにブループリントでもC++でも全く同じ機能を示しています。
上を組み合わせると下画像のようになります。
右がブループリントで作ったもの、左がC++で作ったものですがどちらも全く同じ挙動をしています↓
プログラミングの種類によって機能が違ってくるという訳ではありません。なのでものすごくざっくり言うとブループリントとC++は書き方が異なるだけで同じ機能を実装できるという事です。
😺こう見ると、簡単そうなブループリントでゲーム開発した良さそうですが一概にはそうとは言えません。なぜならC++で作るとゲームのパフォーマンスが良くなるなどのメリットなどがあるためです。それぞれのメリットデメリットを見ていきましょう。
ブループリントとC++の特徴(メリット,デメリット)
ブループリントとC++について特徴を一覧で見ていきましょう。
ブループリントの特徴一覧
メリット | 解説 |
---|---|
①とにかく簡単 | ブループリントは見ての通り、グラフを繋げるだけで実装できるのでとても直感的で理解しやすいです。 |
②プログラマーでなくても扱える | 全くプログラミングについて知らなくてもブループリントは少しの勉強で理解でき、編集できるようになります。チームでゲームを作る場合、デザイナーといった専門外の方でもゲームの調整がしやすいです。 |
③ネットの情報量が豊富 | C++より圧倒的にブループリントはネットでの情報量が豊富で困った時に解決しやすいです。 |
④実装のスピードが速い | とても簡単で直感的に組めるためC++より断然実装が速いです。 |
⑤エラーも少ない | プログラミングで最も挫折するタイミングがエラーが起きた時でしょう。このエラーもブループリントではシンプルな構造なため起きにくく解決しやすいです。 |
デメリット | 解説 |
---|---|
①実装できない機能が一部ある | ブループリントはC++と違い、実装できない機能があります。主な機能はブループリントのみでほぼ実装できますが、ゲームエンジンのコアな部分にアクセスするような機能はC++でないとできません。 |
③処理が若干遅い場合がある | C++と比べ処理が遅い、つまりパフォーマンスがあまり良くない場合があり、特に計算を行うような処理で顕著になります。全く気づかないような遅延がほとんどですが、大規模なゲームになるほどブループリントでの遅延は反映される可能性が高くなります。 |
簡単に特徴をまとめるとブループリントは簡単でとても便利で実装が速いです。しかし処理速度が遅い場合があり、多くはないが実装できない機能もあるという事です。
C++の特徴一覧
メリット | 解説 |
---|---|
①ブループリントでは作れない機能をC++では実装できる | ゲームエンジンのコアな部分にまでアクセスする事ができます。 |
②処理速度が速い | C++はブループリントに比べ処理速度が速いです。特に数学計算においては顕著に違いが現れます。 |
デメリット | 解説 |
---|---|
①難しい | ブループリントよりも難しく、勉強がさらに必要となります。プログラマー向けです。 |
②ネットの情報量が少ない | ブループリントと比べC++は情報量が少ないため、実装したい機能がネット上に載っていない可能性があります。 |
③学習曲線が急 | 上と似たような事ですが、学習教材も少ないです。プログラマーであれば少し勉強すれば理解できますが、全くの初心者にとって最初からC++でゲーム開発する事は難しいでしょう。 |
④作業時間がよりかかる | ブループリントと比べエラーもおこりやすく、またコードを正確に入力しなければなりません。またネットで検索しても中々実装したい機能が見つからないといったケースもあり時間がかかります。 |
⑤エラーが起きやすい | テキストベースのプログラミング共通ですが、テキストを一文字間違えただけでエラーが発生します。解決にも時間がかかりますし、挫折しやすくなります。 |
つまり簡単に特徴をまとめるとC++はブループリントより多くの機能を実装でき、パフォーマンスも良いです。ただしブループリントよりかなり難易度が上がるという事です。
ブループリント,C++特徴まとめ
ブループリントの特徴はなんといってもシンプルで簡単、機能の実装がものすごく速く、ネットにある情報量も豊富です。一方C++は実装できる機能がブループリントより少し多く、パフォーマンスが良いが難しい、時間がかかるという事です。つまりそれぞれ一長一短な訳です。
😺では、ブループリントとC++どちらを使用すれば良いのでしょうか?ここは一概に正解と呼べるものはないのですが、私の答えとしてはまず最初はブループリントでゲームを作れる様に目指す事が望ましいと考えています。以下続いて見ていきましょう。
ブループリントのみ、またはブループリントとC++両方でゲームは作れる
UnrealEngineのゲームはブループリントのみでもゲームは作れますし、ブループリントとC++両方を使用してゲームを作る事も可能です。(ブループリントを一切使わずにC++のみだけでゲームを作る事ができないと言いますか、そもそもC++のみだけでゲームを作るメリットはあまりはないので基本的にはブループリントのみ、または両方を使用するケースの2パターンになります)
✓Unreal製の有名なゲームはブループリントとC++両方が使用されているケースが一般的
UnrealE製の有名なゲームに使用されているパターンとしてはブループリントとC++両方を使ってゲーム開発される事が多いようです。おそらくですが、一番Unreal製のゲームで多いパターンとしてはブループリントメインでC++がサブといった感じで両方使用してゲーム開発される事が様々な記事を見た感じ多い気がします。ただし有名なAAAタイトルのゲームはC++メインで作っている所が多そうです。正直ここは自身が作るゲームに合わせて決定するのが良いかと思います。では、ブループリントとC++を使用するパターンを見ていきましょう。
・ブループリントのみで作られたゲーム
例えば以下のBrightMemoryというゲームはブループリントのみで作られたゲームとの事です(ソースはこちら)。ブループリントのパフォーマンスが悪いと言えど、少なくともこのゲームで遅いと感じる事は無さそうです。
・C++メインでブループリントと両方で作られたゲーム
フォートナイトはブループリントとC++両方が使われていますが、ほとんどはC++で作られているという事だそうです(ソースはこちら)。特にフォートナイトのような大規模なオンラインゲームではC++でパフォーマンス良く実装する事が重要になってきます。
ゲームを開発するパターン | 解説 |
---|---|
ブループリントのみ | 実装は速く「ゲーム開発して遊んでもらえる」という目的を達成するには一番速い手段。基本的にはゲームプレイに支障を及ぼすほど遅くなる事はないが、ゲームの機能や規模によってはゲームに遅延が発生する可能性がある。 |
ブループリント,C++両方を使用するパターン | ブループリントでメインで作って、ブループリントで作れない機能だったりをC++で実装したりと両方の良さを活かしてゲーム開発できる。最もおすすめ |
😺欲を言えばブループリントとC++で作るパターンが一番ゲーム開発は良いですが、まずは最初はブループリントを使ったゲーム開発を目指すのがおすすめです。
まず最初はどんな方でも「ブループリント」を学ぼう!
最初はプログラミング経験者の方でもブループリントから学ぶ事をおすすめします。理由は以下です。
ブループリントを最初に学習した方が良い理由 |
---|
①ブループリントの方が簡単でゲームも充分に作れるから |
②UnrealEngineの初心者向けの教育コンテンツは基本ブループリントで解説されているから |
③C++の教育コンテンツでもブループリントの知識があるという前提で、ブループリントも一緒に使われて解説されているから |
④C++だけの知識ではネットの情報が少なすぎてゲーム開発が難しい |
という事でそもそもブループリントの知識なしでUnrealEngineのC++を学ぶ事はかなり難しいからです。またブループリントでもC++でもプログラミングの仕組みとしては一緒です。つまり簡単なブループリントから基本やプログラミングの仕組みを学び、その後にC++を少しずつ学んでいくという方がゲーム開発について理解しやすいと個人的には思っているからです。という事で初心者の方は簡単なブループリントから学んでいく事をおすすめします。まずはブループリントでプログラミングとUnrealEngineについて学び、後からさらにゲーム開発を極めていきたいまたはパフォーマンスの良いゲームを作る必要があればC++を学ぶという事がおすすめです。
😺という事で最後にブループリントとC++どっちでゲーム開発をするべきなのでしょうか?長くなりましたがまとめていきます。
ブループリントとC++どっちでゲーム開発をする?
ブループリントとC++どっちでゲームを開発をするべきなのでしょうか?選択の基準としては自身のレベルと作るゲームに合わせて選ぶという事が大事かと思います。以下図にしてみました。
ちょっと解説だけさせてすると、基本的にはブループリントでゲーム開発。パフォーマンスが重要となる遅延が許容できないオンラインのFPSゲームなどはC++が良いかと思います。ブループリントだと遅延が発生してしまう可能性があり、こういった一瞬の時間が重要なゲームにとってはC++の方が最適でしょう。また、大規模なゲームになればなるほどブループリントの遅延は顕著になると聞くので法人として大規模なゲームを開発する場合はC++の方が良いと思われます。またC++を充分に扱える経験者の場合はC++メインで作った方が何かとメリットは多いです。という事で上のグラフのような結果になりました。
なので順番としましてはまず最初はブループリントでゲームを作る事を目的にして、その後さらにUnrealEngineでのゲーム開発を極めたい方はC++を学んでいって最終的にはC++とブループリント両方でゲームを作れる状態を作る事が望ましいという事になります。
まとめ
UnrealEngineではプログラミングは二つの方法があります。それがブループリントとC++で、どちらも全く同じ機能を作る事ができ、仕組みも一緒です。つまり、ざくっり言うと見た目が異なるだけです。ブループリントの特徴は簡単で直感的、作業も速いです。一方C++は難しいですがC++にしか作れない機能があったりパフォーマンスが向上する場合があります。状況に合わせてブループリントかC++かを選ぶ事が重要で、初心者の方は簡単なブループリントから学ぶのがおすすめです。まず最初はブループリントでゲームを作る事を目的にして、その後C++について学んでいって最終的にはC++とブループリント両方でゲームを作れるようにしていきましょう。なおゲームを作る場合は状況に合わせて(初心者の方はブループリントで、パフォーマンスが求められるゲームの場合はC++メインで)といった感じに作っていきましょう。
その他よくある質問など
ブループリントだけでもゲーム開発はできる?
できます!
最初はブループリントを学習していけばいい?
はい、そうです。ブループリントでゲーム開発は解説されている事がほとんどなのでブループリントは学ばないという選択肢は無いと思います。
最初はゲームをブループリントで作って後からC++に変更する案について
最初はゲームを簡単なブループリントで作って後からパフォーマンスの良いC++に変更するという事もしようと思えばもちろんできる訳ですが、この方法についてはC++への移行作業が大変で手間であるという事が軽視しがちですが大きなデメリットになってきます。なので後からC++に変更する予定があるゲームに関しては最初からC++で作った方が良いと言う意見も聞きますが、個人的には最初はブループリントで作っていって後からC++にするというのもありだと思います。
ブループリントが重い?単にC++にすればパフォーマンスが良くなる..という訳ではない
ブループリントだろうがC++だろうが、重たい処理を行えばゲームは重たくなります。なのでブループリントで重いなと感じた時にするべきはC++でゲームを作り直す事ではなく、ブループリントの組み方の改善を行う事です。よくある重たくなる例としてはアクタの大量生成やTickノードを至る所で使用している等なので、改善方法としてはゲーム中にアクタを大量生成するのではなく、ゲーム開始時などにアクタをまとめて生成して準備しておくとか、Tickノードを使用しているブループリントは必要なくなった時に逐一無効にするなどの対策が重要です。そういった対策をした上でブループリントが重い場合にC++を導入するか検討し始めるといった具合になります。
ブループリントの使い方について解説してる本書いています!
UnrealEngine5(UE5)の教科書 [ゲーム開発入門編,第一巻]
こちらの本では、UnrealEngineでブループリントを使用したゲームの作り方について解説していっています。興味ある方はこの本の四章ブループリント入門からチャレンジしてみてください!もしこの本に需要があればC++のチュートリアルとして別冊も作りたいと思っています!
UnrealEngineのプログラミングの解説については以上になります。お疲れ様でした。
Discussion