XR 開発を始めたい方への個人的 Unity Learning Roadmap 2020

TIS Advent Calendar 2020 の最終日担当の @xrdnk です．</br>

# 緒言

軽く自己紹介を．</br>
TISのインキュベーションセンターという部署でXR開発の仕事にしてます．</br>
[こんなの](https://www.tis.jp/service_solution/teleattend/)のとか[こんなもの](https://www.tis.jp/service_solution/xr_campus/)を作ってたりしています．</br>

コロナ禍に入り，XR(AR/VR/MR)が以前より身近な技術になってきたと感じており，</br>
XR開発をしてみたいと興味・関心を抱く方々が増えている印象があります．</br>

本稿はそんな方々のためのUnity学習ロードマップを個人的にまとめてみた記事になります．</br>
(※飽くまでも**個人的**です．これをやれ！という強制的な意味合いを持つものではありません．)</br>

# Unity ってなに

ゲームエンジンです．クロスプラットフォームに対応で，モバイル，ブラウザ，PCなどのゲーム製作，XR，アニメや映画製作に用いられたりしています．それほど機能が豊富ということです．
</br>
今回はXR開発向けのロードマップなので，主にXRに関わる部分だけ取り上げていきます．（とはいえゲーム開発知識を持っているとアドなのは間違いない．）

# プログラミング言語は C# 

C#でプログラミングをします．別言語に触れたことがある場合はすぐに取っ掛かりやすいですが，プログラミング初心者の方は1冊C#の本を進めるといいと思います．</br>

幾つか出版されておりますが…，以下の本が初心者におすすめです．</br>

* [新・標準プログラマーズライブラリ　なるほどなっとく　C#入門   出井 秀行](https://www.amazon.co.jp/dp/B07PQDZ56Y)

シンプルでわかりやすく説明しています．</br>


* [基礎からしっかり学ぶC#の教科書　改訂新版](https://www.amazon.co.jp/dp/B084Q5GHCS)

C#8まで対応しています．文章が多めで，少し難解な部分はあるかもしれません．</br>
デリゲート，ラムダ式，イベント，非同期処理などの高度なプログラミングについての説明があります．</br>
中級者向け？（こちら飛ばして，下に説明する本にすぐ入ってもいいかも）</br>

**Unity 2020.2 からは C# 8 が対応するようになっているので，C# 8 まで履修しているとよいでしょう．**</br>

</br>
C#のより深い知識が必要になる場面もあり，以下の本を読むといいと思います．</br>
[実戦で役立つ C#プログラミングのイディオム/定石&パターン   出井 秀行](https://www.amazon.co.jp/dp/B06WP7HJ27/)
約750ページで分厚いので全部でなくても，以下，やったほうがいいChapterを記します．</br>

* ラムダ式とLINQの基礎(後述のUniRx, UniTaskなどに関わる)
* 基本イディオム(null条件演算子，プロパティ，using文，キャスト etc.)
* 文字列の操作(Stringのメソッドたち，StringBuilder etc.)
* 配列とListの操作
* ディクショナリの操作
* ファイルの操作(IO操作)
* シリアル化，逆シリアル化(JSONのシリアライズはよく使います)
* LINQを使いこなす(後述のUniRx, UniTaskに関わる)
* 非同期/並列プログラミング(UniTaskに関わる)

# Unity 最初の取っ掛かり

最初にUnity公式が出しているYouTube動画をご覧ください．</br>
[あなたもUnity、はじめてみませんか？（字幕版）](https://youtu.be/9GKo2iogPsM)
Unityの概要を凡そ把握できると思います．</br>

次にまずUnityがどんなものか手を動かして覚えていきます．</br>
初心者向けの本は色々あります．以下紹介しますが，1冊いずれかやればよいかと思います．</br>

* [Unity2020入門 - 荒川巧也](https://www.amazon.co.jp/dp/4815606641/)

いわゆるひよこ本．</br>

* [Unityの教科書 Unity 2020完全対応版　2D＆3Dスマートフォンゲーム入門講座](https://www.amazon.co.jp/dp/B089PWG14S)

個人的にねこ本って呼んでる．</br>

* [UnityではじめるC#　基礎編](https://www.amazon.co.jp/dp/B08PCCBJ33)

いわゆる和尚本．</br>

* [Unity 3D/2Dゲーム開発実践入門 Unity2019対応版](https://www.amazon.co.jp/dp/B0855CF2FR/)

上記3冊の本に比べて少しレベルが高い印象なので，いずれか1冊終わったらこちらをやるのもあり．</br>

# Unity 実践入門的な 

Unityの参考書の問題として，中級者・上級者への道標となる参考書があまりない問題があったりします．</br>
上の本1冊終えたら，[スタジオしまづの嶋津恒彦氏のUdemyコース](https://www.udemy.com/user/tsunehiko-shimazu/)を幾つか行うとよいと思います．</br>
セール時を狙えば1コース，1200円～1500円程度で購入できます．</br>

個人的オススメコースは以下の通り．</br>

* [Unityゲーム開発入門：Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法](https://www.udemy.com/course/studio_shimazu_sideview_action/)

2D実践入門向け．</br>

* [Unity3D入門の決定版！RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース](https://www.udemy.com/course/unity3d_action_rpg_studio_shimazu/)

3D実践入門向け．</br>

* [Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース](https://www.udemy.com/course/unity2d-card-game/)

ここまでの中級者向けの日本語コースはないと感じるレベルです．</br>
ScriptableObjectやDoTween，ModelやViewの概念等を把握できたり，実践的なUnityC#コーディングを追えることができます．

(2021.03.28 更新)</br>

* [ステップアップUnity ──プロが教える現場の教科書](https://www.amazon.co.jp/dp/4297119277)

実践的と言える本が最近出版されました．</br>
著者の方々は Cyber Agent グループの方々で，実践的な内容を学ぶことが出来ます．</br>

</br>
</br>
ここまでゲーム向けのUnity開発ばっかりやんけ～と思われる方が多いと思いますが，</br>
XR開発はゲーム制作の延長というのが実感としてあります．</br>

# VR開発 最初の取っ掛かり

ここからVR開発，最初の取っ掛かりです．</br>
正直この記事執筆段階では，**UnityのVR開発本はないと思っています．**</br>
(あるにはあるけどUnityのバージョンが低かったり…個人的にうーんという感じのものだったり)</br>

そこでですが，以下のUdemyコースをオススメします．</br>
VR開発をやるからには，Oculus Quest / Quest 2 を所持しているとみなします．</br>

[VR Development Fundamentals With Oculus Quest / Quest 2 And Unity](https://www.udemy.com/course/oculus-quest-development-with-unity/)
全て英語ですが字幕付きです．動画を追って手を動かすだけでも把握できると思います．</br>
ハリーポッターのクィディッチを題材に，Oculus Integration，XR Interaction Toolkitの使い方を説明し，</br>
~~ジェネリック~~Beat Saberっぽいのを作りながら，Oculus Quest を用いたVR開発の事始めを身に着けることができます．</br>

[Multiplayer Virtual Reality (VR) Development With Unity](https://www.udemy.com/course/multiplayer-virtual-reality-vr-development-with-unity/)
上のコースと同じ講師で，VR × マルチプレイ開発を身に着けることができます．</br>
現在Unityでマルチプレイといえば，Photonがよく使われており，使い方も知ることができます．</br>
コースではOculus IntegrationのAPIではなくXR Interaction ToolkitのAPIをメインで実装しています．</br>
キャラクターの頭部や腕の動き，移動の同期，ボイスチャット機能などを学ぶことができます．</br>

ここまでやれば，Quest / Quest 2 での開発は大丈夫だと思います．</br>

# AR開発 最初の取っ掛かり

iOSに対してはARKit，Androidに対してはARCore...という時代がありましたが，</br>
現在は[AR Foundation](https://unity.com/ja/unity/features/arfoundation)をまず触れるのがAR開発の初歩ではないかなと思います．</br>
Mac機がない場合はiOS対応できませんが，Androidには対応できますので，Windows機があれば大丈夫です．</br>

今現在出ているAR参考書なんですが，古いものでは以下の本が出版はされております…．</br>

* [ARKitとUnityではじめるARアプリ開発](https://www.amazon.co.jp/dp/4798054364)
* [ARCoreとUnityではじめるARアプリ開発](https://www.amazon.co.jp/dp/4798053945)

**ただ上記の本はAR Foundationが登場する前の情報になっており，今のUnity 2019 LTSでは対応していません．購入をおすすめしません．**</br>

以下の技術書がおすすめです．</br>

* [ARがわかる本 〜UnityとAR Foundationで作るARKit/ARCore対応アプリ開発](https://techbookfest.org/product/6287102727684096?productVariantID=6631972579311616)
* [ARがなじむ本 〜UnityとAR Foundationで作る現実感のあるARアプリ開発〜](https://techbookfest.org/product/4824921242861568?productVariantID=6493222385745920)

日本語でAR Foundationを学べる本はこのじゅこやさんが出している本しか私は知らないです．</br>
ARとは何か，開発環境の手順，サンプルアプリの作り方の説明も丁寧なので，まずは手を動かして一通りAR開発を知りたい方に打って付けです．</br>

# MR開発 最初の取っ掛かり

MR開発 = HoloLens開発 を前提に説明すると，Microsoftが出しているHoloLens チュートリアルをやるとよいかと思います．</br>

[HoloLensチュートリアル](https://docs.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/tutorials)

つい最近 Microsoft Learn で Mixed Reality 入門チュートリアルも出てます．</br>

[Mixed Reality 関連の Microsoft Learn のまとめ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/discover/mr-learning-overview)

HoloMagiciansというHoloLensアプリ開発者グループみたいなのがありまして，</br>
ここで登壇しているつよつよな方々の資料がとても詳しいので，そちらを参考にするのを激しくオススメします．</br>

[HoloMagicians](https://hololens.connpass.com/)

後はMixed Reality Toolkit(MRTK)に沢山触れればいいんじゃないかな…．(投げやり)</br>
MRTKのドキュメント，HoloLabの方々が翻訳して下さっております．（大変感謝）</br>

[Mixed Reality Toolkit Official Document](https://hololabinc.github.io/MixedRealityToolkit-Unity/Documentation.ja/WelcomeToMRTK.html)

# XR開発 もっといろいろ勉強したい場合は…

チュートリアル，基礎レベルまで終えたら，自分でオリジナルアプリを作りながら，</br>
詰まったら調べる…を繰り返していくのがスキルアップへの道だと思います．</br>

どうしても不安という方は，Unity Learn Premiumというのオススメです．Unity公式が出している学習コンテンツです．</br>

[Unity Learn Premium (XRで検索)](https://learn.unity.com/search?k=%5B%22q%3AXR%22%5D)

こちら今まではUnity Personalだと閲覧可能なコースは限定されていたのですが</br>
今年の春くらいからコロナの影響もあるのか，Unity Personalでも全部解放されるようになりました．</br>
欠点といえばだいたい英語というところですが，Unityに触れる以上は英語は必須だと思いますので乗り切りましょう．</br>

日本語で書かれているのもあります．</br>

(追記)

ここ最近，Unity Premium の日本語対応されました．殆ど日本語で読めるようになっています．</br>

[初心者向け VR 開発入門：エスケープルーム](https://learn.unity.com/project/vr-beginner-the-escape-room-jp)
内容としては，[VR Development Fundamentals With Oculus Quest / Quest 2 And Unity](https://www.udemy.com/course/oculus-quest-development-with-unity/) の前半と同じ感じです．</br>

# その他インプット

以下からはプラスアルファ要素になります．

## ソーシャルゲームのクライアント入門以前

[izmさん](https://twitter.com/ism)のこちらの記事がとてもタメになります．</br>
[ソーシャルゲームのクライアント入門以前]
(https://neon-izm.github.io/before_join_socialgame/docs/)

## UniRx/UniTask本

[UniRx/UniTask完全理解　より高度なUnity C#プログラミング](https://www.amazon.co.jp/dp/4048930753)

[とりすーぷさん](https://twitter.com/toRisouP)のUniRx/UniTask本です．</br>
UniRx, UniTaskのリファレンス本になります．</br>

UniRxを利用すれば，Unity でリアクティブプログラミングが出来るようになります．</br>
とはいえ，2023年現在は Rx は主流ではなくなりつつあります．</br>
MVRPというデザインパターンを知っていればいい程度でよいかなと思います．</br>

UniTaskを利用すれば，Unityでasync/awaitを使った高パフォーマンスな非同期処理を記述することができます．</br>
~~（さようならコルーチン）~~

## Extenject(旧 Zenject)本

[ZenjectチョットワカルBook](https://booth.pm/ja/items/1520608)

[いもさん](https://twitter.com/adarapata)のExtenject本です．</br>
Extenject(旧 Zenject)はUnity用のDIフレームワークのライブラリです．</br>
必須までは行かないんですが，DIを使っている現場では参考になる本でしょう．</br>
Extenjectの使い方について日本語で書かれている貴重な本です．</br>

## VContainer

UnityでDIライブラリといえばExtenjectがメジャーでしたが，VContainerが最近登場しました．</br>


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Unity用 DI ライブラリの VContainerの webサイトができました。<a href="https://t.co/CmCzWTJPaS">https://t.co/CmCzWTJPaS</a><br><br>README ペラ1だったドキュメントをこっちに移行しつつ、<br>日本語版も準備中らしい!</p>&mdash; ハダシA (@hadashiA) <a href="https://twitter.com/hadashiA/status/1337230678107176960?ref_src=twsrc%5Etfw">December 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# その他アウトプット

個人開発なんも思い浮かばないどうしよう……．でも何か作ってみたい…</br>
そう思った場合は以下のゲームジャムに出てみるのはどうでしょうか．</br>

* [Unity 1週間ゲームジャム](https://unityroom.com/unity1weeks)

1週間でUnityでゲームを作ります．別に締切過ぎても大丈夫．</br>
Unityの新機能を試したり，アウトプットの機会の場として利用していいんじゃないんでしょうか．</br>
~~ガチ勢がすごすごゲームを投稿しますが，気にしなくていいです．だいたい本業ゲームプログラマーなので…．~~</br>
基本的に3か月スパンで開催されている認識です．</br>

* [cluster ゲームジャム](https://www.contest.cluster.mu/)

clusterはマルチデバイス、マルチプレイのゲームを制作できるプラットフォームです．</br>
2日間でclusterのワールド制作を行います．</br>
今年夏と冬に開催されました．来年以降もやりそうな気配…．半年スパンという認識．</br>
clusterはCluster Creator Kitを利用して開発します．(C#ランライムスクリプトが使えない)</br>
Cluster Creator Kitにはアイテム、トリガー、ギミック、オペレーションの4つのコンポーネントがあり，</br>
これらを主に組み合わせて制作していきます．</br>
3Dのワールド制作，レベルデザインのアウトプットの場としてうってつけです．</br>
VRのコンテンツ制作にも生かせますし，つよつよワールドを作れたら，賞も貰えるチャンスもありますしね．</br>

# 結言

以上，XR開発始めたい方への個人的Unity Learning Roadmap 2020でした．
全てこちらに記述されていることを実践しろといえばそうではなく，各個人参考程度になれば幸いです．</br>
他にこんなのがあるよ！！これもおすすめだよ～～！！というのがあればコメント頂けると嬉しいです．</br>
</br>