技術者向けUnreal Engineの学習方法

## はじめに
[Unreal Engine (UE)](https://qiita.com/advent-calendar/2023#participating_calendar "Unreal Engine (UE) Advent all")シーズン４、２３日目の記事です。
今回は、Unreal Engine C++を学習しなおしたら、学習動画として有用なのを見つけたのと、英語教材のちょっとしたチップスを紹介します。

#### 書き初めに流行りのChat-GPTを使ってみました。
Chat-GPTさんに`How to learn Unreal Engine for engineers`のプロンプトでお尋ねしました。
もちろん、回答も英語で翻訳は、[Google Chrom](https://www.google.com/intl/ja_jp/chrome/ "Google Chrom Download")拡張機能の[Google オフライン ドキュメント](https://chromewebstore.google.com/detail/google-%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/ghbmnnjooekpmoecnnnilnnbdlolhkhi "Google Document Download")がオススメです。以下、結果の冒頭です。

`
エンジニアにとって Unreal Engine を学ぶことは、刺激的でやりがいのある旅です。 Unreal Engine は強力なゲーム開発プラットフォームであり、仮想現実、建築ビジュアライゼーション、シミュレーションなど、ゲーム以外のさまざまなアプリケーションにも広く使用されています。 始めるのに役立つガイドは次のとおりです。
`

俺より文才あるやん君！なので以降は、Chat-GPTさんの真似をしてみます。
**Chat-GPTさんの翻訳全文は、下に貼り付けました。** 但し原文は英語です。

## 最近になってUEの学習情報が充実してきた
私が仕事で触っていた頃2015~16年位で、当時はリリースノートとソースコードとリファレンスを読み漁るのが、仕事だったような気がします。
余談ですが、Unreal Editorは、Windows98の頃も少しこすってて。箱と箱を適当にくっつけて、ビルドして出来たゲームの中でここならオ〇ニーしてもバレないなとかアホな事を考えてたら、エディターがクラッシュした経験がありますｗ

余談はさておき最近になり、動画を主体とした非常に優れた学習資料が出てくるようになりました。が英語主体です。
https://dev.epicgames.com/community/unreal-engine/getting-started/games
![UE学習.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25895/075e8cd9-4699-a2a9-e157-9678edbcf331.png)

上記、[BiginPlay()](https://dev.epicgames.com/community/learning/paths/0w/unreal-engine-beginplay)より、以下が技術者向けのトピックになります。全編英語ですが、ソースを追うより早く全体像をつかむことができます。

[Engine Structure（エンジン構造](https://dev.epicgames.com/community/learning/tutorials/98E/unreal-engine-begin-play-engine-structure "Engine Structure")
Unreal Engineの作りとゲームのリリースの概要、自動化テストの作成など

[Programming（プログラミング](https://dev.epicgames.com/community/learning/tutorials/lMr9/unreal-engine-begin-play-programming "Programming")
アンリアルエンジンソース外観、コード内のさまざまなコンテンツ説明、コンパイラー、メモリー管理、各種デバグプロファイル機能について

[Blueprints（ブループリント](https://dev.epicgames.com/community/learning/tutorials/ryZ7/unreal-engine-begin-play-blueprints "Blueprints")
ビジュアルスクリプティングで学習コスト軽減。タイムラインアップデート。参照ビューワー、製品ビルドのパフォーマンスについて

[World Building（ワールド構築](https://dev.epicgames.com/community/learning/tutorials/9k9B/unreal-engine-begin-play-world-building "World Building")
アンリアルの世界がどう作られているのか説明、トリガー、Quixel Bridgeによるリアルなアセットの活用、CTL＋Shiftの下からあがるやつ、PolyEditの説明、ランマススプライン、ウォーターシステム、CTL＋L押しながらディレクショナルライトのディレクション調整、大気色のスカイライト

[Rendering（レンダリング](https://dev.epicgames.com/community/learning/tutorials/vyZ1/unreal-engine-begin-play-rendering "Rendering")
レンダーパイプラインの説明、ナナイト、仮想シャドーマップ。スナップショットで作成してGPUプロファイラーの作成、デバイス別のスケーラビリティ設定

[Gameplay（ゲームプレイ](https://dev.epicgames.com/community/learning/tutorials/l21z/unreal-engine-begin-play-gameplay "Gameplay")
最初に見つけたビデオ、全てはここから

[Audio（オーディオ](https://dev.epicgames.com/community/learning/tutorials/0ODw/unreal-engine-begin-play-audio "Audio")
エディターで編集しながら、見せてくれます

[Niagara（ナイヤガラ（Unityの手裏剣みたいなヤツ](https://dev.epicgames.com/community/learning/tutorials/j9YO/unreal-engine-begin-play-niagara "Niagara")
サウンドに合わせて実行とか

[Animation（アニメーション](https://dev.epicgames.com/community/learning/tutorials/Pd0b/unreal-engine-begin-play-animation "Animation")
アニメーションステートマシン

[UMG（UI作成ツール](https://dev.epicgames.com/community/learning/tutorials/zrVZ/unreal-engine-begin-play-umg "UMG")
ゲーム用UI作成、ドラッグアンドドロップなどは、独自でしてね

[The Unreal Editor for Fortnite for Unreal Developers（今話題のフォトナエディター](https://dev.epicgames.com/community/learning/tutorials/XjPV/unreal-engine-begin-play-the-unreal-editor-for-fortnite-for-unreal-developers "The Unreal Editor for Fortnite for Unreal Developers")
究極にシンプル

上記動画の回路図は、サイズの大きい画像ファイルで見ることができます。
ペイントなどに関連されていないファイル形式で保存（jpgなど）し、拡大縮小、移動しながらだと理解が深まるかと思います。
![pngToJpg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25895/6fdacb71-c3ed-29c6-9302-c267b48a6264.png)

## と英語圏の人ならコレで終わりなのですが...

### 英語Webサイトのブラックマジック
今回ご紹介した公式サイトは、頭だけ日本語で中身はほとんど英語です。
**Tips:**
公式サイトの地球儀マークで言語を英語に変え、[Google Chrom](https://www.google.com/intl/ja_jp/chrome/ "Google Chrom Download")拡張機能の[Google オフライン ドキュメント](https://chromewebstore.google.com/detail/google-%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/ghbmnnjooekpmoecnnnilnnbdlolhkhi "Google Document Download")で翻訳が有効になると、そうです、日本語に翻訳されます。
公式動画も日本語版の字幕が用意されています。
歯車マークのSubtitles English Captionsをクリック日本語cc選択

### 学習順序について
https://dev.epicgames.com/community/unreal-engine/getting-started/games

最初の２つは、初学者向けのUnreal Editorの使い方やインストールなどです。あ～コレこうするのかってのもあるのですが、技術者なら飛ばして３つめにいきなり言っても良いと思います。
お時間があれば、最初から基礎を学習していくのは、無駄ではありません。

３つ目は、それぞれのテーマで全体像を英語で説明してくれています、英語がネイティブじゃないので、いままでと同じように日本語字幕か英語字幕を翻訳してもらいましょう。

このコンテンツは本当に勉強になりました。全体像を把握することは、全ての仕事でとても重要な事です。終わりのない山登りは、大変ですしペース配分もできません。そんな山登りを強引にぴっぱって言ったら天に見放されるのが落ちです。

動画内の字幕も日本語が選べるもの選べない物でも、[Google Chrom](https://www.google.com/intl/ja_jp/chrome/ "Google Chrom Download")拡張機能の
[Video CC translator](https://chromewebstore.google.com/detail/video-cc-translator/fhbpmacbgklobobcieiaoibpjhdnmcfn?hl=ja "Video CC translator Download") を使うと英語Subjectsがあれば、翻訳してくれます。そして、コレは動画上で表示位置を動かせます。字幕で見えない場合は動かしてください。
![gave.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25895/accb4098-897e-180f-99c1-822b73bf61a9.png)

### Unreal Engine C++ の書籍
あとこの[Unreal Engine C++本](https://amzn.asia/d/9OA7TCT "C++でつくるUnreal Engineアプリ開発 for Windows & macOS (固定レイアウト版) Kindle版")もガーベージコレクションを実装してる事が書いてあったりで、そうだったんだ～ってなりました。（現在はなんかプレミア価格なので、キンドル版がおすすめです。

## 何かの言語ができるならBPから入ると混乱します。
私がUEのお仕事をしていた(2014-6年）頃は、正規の学習リソースとしてリリースノートと
Unityから移行する人用ごく一部の簡略ドキュメントくらいしか公式にありませんでした。
Unreal Engine3~4を経験してる人からすれば、知ってて当然の世界がアンリアルなのかもしれません。

https://www.udemy.com/share/101WG63@DOsHRZIEN_TxmP6s6zNlmZ9NNsn3e30peaB36-D3aerw1MlFtQsJ_SU7x0mDLyu0/

ブループリントの慣れている人の動画を見ると、何故かいろいろなメソッドからキャストしています。
コレは、UE C++のコードをそのままをノードグラフにした為だったのです。例えば

	AFPSGameMode* GM = Cast<AFPSGameMode>(GetWorld()->GetAuthGameMode());

良くなれている人が魔法のようにコーディングしますが、クラス相関図が頭に入っているのでしょうね。

## UE C++は、神が書いたコード
ノードグラフとの連携も考えて、C言語の#defineでラベルのマクロ実装が入っています。
C++のオーバーラップロードとか謎なテンプレート記述もあり。
まあ～。神ってるので、UE C++コードでルール通りの記述をすれば、BPのプロパティーに出てきた数値を変えて、BPのノードグラフをカッコよく決める事が出来ます。

<details><summary>サンプルコード</summary>

'''C++
puts
Black Hole

// Called every frame
void AFPSBlackHole::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	// Find all overlapping components that can collide and may be physically simulating.
	TArray<UPrimitiveComponent*> OverlappingComps;
	OuterSphereComponent->GetOverlappingComponents(OverlappingComps);

	for (int32 i = 0; i < OverlappingComps.Num(); i++)
	{
		UPrimitiveComponent* PrimComp = OverlappingComps[i];
		if (PrimComp && PrimComp->IsSimulatingPhysics())
		{
			// the component we are looking for! It needs to be simulating in order to apply forces.

			const float SphereRadius = OuterSphereComponent->GetScaledSphereRadius();
			const float ForceStrength = -2000; // Negative value to make it pull towards the origin instead of pushing away

			PrimComp->AddRadialForce(GetActorLocation(), SphereRadius, ForceStrength, ERadialImpulseFalloff::RIF_Constant, true);
		}
	}
}
'''
</details>


## 全体像が解れば、UEFNのシンプルさに驚く
はっきり言って動画を見るだけでも、ザッと５.２時間と長い旅です。旅の終わりにUEFNのご馳走がまっていす。UEFNはコレだけ？と驚くほどシンプルな構造です。UEネイティブのサウンドなんかも音を作れっていじれてるので楽しそうです。

余談として、[サイバーパンク](https://youtu.be/fa3_Mfqu8KA?si=JtX5mhj0CyNb1ahv "57万再生 3年前")のリップシンク実装についてです。
ゲームのリップシンクは、音の強弱での口パクや音声データに合わせてリップシンクのアニメーション。フェイスキャプチャを使った、アニメーション作成など、いろいろありますが、コレはスゴイ技術ですので載せました。


## 最後に
UEの学習仲間が欲しいです。
先ずは、お友達になってください。

## あとがき

最近、Udemy教材をゆっくり見直せる機会があり、じっくり取り組んだのですがマジメにやればよかったです。何年か無駄にした気がします。


## CHAT-GPTのプロンプトと内容

<details><summary>2023.11.30 How to learn Unreal Engine for engineers </summary>

basicary unswer is all english

エンジニアにとって Unreal Engine を学ぶことは、刺激的でやりがいのある旅です。 Unreal Engine は強力なゲーム開発プラットフォームであり、仮想現実、建築ビジュアライゼーション、シミュレーションなど、ゲーム以外のさまざまなアプリケーションにも広く使用されています。 始めるのに役立つガイドは次のとおりです。

1. **基本を理解する:**
    - ゲーム開発とコンピュータ グラフィックスの基本を理解します。
    - 3D モデリングとアニメーションの基礎について学びます。

2. **システム要件:**
    - コンピュータが Unreal Engine のシステム要件を満たしていることを確認してください。
    - 公式 Web サイトから Unreal Engine をダウンロードしてインストールします。

3. **公式ドキュメント:**
    - Unreal Engine Web サイトで入手可能な Unreal Engine の公式ドキュメントから始めます。
    - 入門ガイドを読んで、インターフェースと基本的な機能を理解してください。

4. **オンライン チュートリアルとコース:**
    - オンラインのチュートリアルとコースを探索します。 Udemy、Coursera、YouTube などのプラットフォームでは、Unreal Engine の幅広いチュートリアルが提供されています。
    - エンジニア向けに特別に調整されたコース、またはアーキテクチャのビジュアライゼーションやシミュレーションなど、興味のある側面をカバーするコースを探します。

5. **プログラミング スキル:**
    - Unreal Engine はスクリプト作成に C++ を使用します。 C++ にまだ慣れていない場合は、基本を学ぶことを検討してください。
    - ノードベースのスクリプト システムである Unreal Blueprints も利用できます。 従来のプログラミングに慣れていない人にとっては有益です。

6. **コミュニティとフォーラム:**
    - Unreal Engine のフォーラム、コミュニティ、ソーシャル メディア グループに参加します。 他の開発者と関わり、アドバイスを求めてください。
    - Unreal Engine AnswerHub は、具体的な質問をしたり、コミュニティから助けを得たりするのに最適な場所です。

7. **プロジェクトと実践経験:**
    - 小規模から始めて簡単なプロジェクトに取り組み、知識を応用してください。
    - 自信が持てるようになったら、プロジェクトの複雑さを徐々に増やしてください。

8. **Unreal Engine の公式 YouTube チャンネル:**
    - 公式 Unreal Engine YouTube チャンネルに登録してください。 定期的にチュートリアルビデオを公開し、プロジェクトを紹介します。

9. **高度なトピック:**
    - 最適化、パフォーマンス プロファイリング、マルチプレイヤー ゲーム開発などの高度なトピックを探索します。
    - Unreal Engine の組み込みビジュアル スクリプティング システム、ブループリントについて学びます。

10. **特殊な機能のドキュメント:**
     - VR 開発やシミュレーションなどの特定の機能に興味がある場合は、関連するドキュメントとチュートリアルを参照してください。

11. **最新情報を入手してください:**
     - Unreal Engine は定期的に更新され、新機能や改善が加えられます。 公式チャネルを通じて最新の更新情報を入手してください。

12. **ポートフォリオの構築:**
     - Unreal Engine プロジェクトを紹介するポートフォリオを作成します。 これは、仕事やフリーランスの機会に応募するときに役立ちます。

ゲーム開発を学ぶこと、特に Unreal のような強力なエンジンを使用することは段階的なプロセスであることを忘れないでください。 忍耐、練習、実践的なアプローチが成功に大きく貢献します。
</details>