G's EXPANSION Unityを受けてみた

# 1. はじめに

<!-- はじめに -->
”セカイを変えるGEEK”を育てるG's ACADEMYが「専門学習を通じて自らのチカラを高める」ことを目的に提供する「G's EXPANSION講座」の中から「Unity実践プログラム」を受講してみました。Unityの実践的な基礎力を体系的に身につけたかったためです。

今回、オンラインゲーム制作を通じて、Unityを使ったリアルタイムかつインタラクティブなコンテンツの作成方法、現時点ではインターネット上の参考ドキュメントもまだまだ少ないメタバースにも応用可能なPhoton Fusionを用いたオンラインマルチプレイの基礎的な実装方法を学ぶことができたので、その内容についてまとめます。

https://gs-exp-unity-2022.peatix.com/

※補足
　・G's EXPANSION講座は、G'sアカデミーの生徒・卒業生でなくても受講可能です。
　・受講当時の内容に基づく記事となります。最新の更新・変更内容は、都度ご確認ください。


# 2. 講座の流れ

|Step|    内容 　 |     内容     |
|:---:|:-------------:|:-------------:|
|１|事前学習|事前配布Notionにてあらかじめ個別に環境設定・基礎実装| 
|２|オンラインライブ授業|前週課題1on1確認＋質疑、Notion教材に基づき各自実装+質問|         
|3|宿題・課題|（前週教材が未完了の場合はキャッチアップの上）課題制作→Step2|      


# 3. 講座概要
### Step1: 事前学習
講座に申し込むと、先生作成の動画・画像を含むNotion教材がslack経由で配信されます。
環境設定など分からないポイントがあると、その先に行けなくなってしまうことが多々ありますが、初学者でも躓かないようになっていました。

操作方法をNotion、およびNotion上のYoutubeで丁寧に記載してくれており、これを元に初回講義までに各自がUnityで課題を進めます。Unityエディタ上での操作方法など、非常にわかりやすかったです。

### Step2: オンラインライブ授業
オンラインでのライブ授業が5回+制作物発表会1回の計６回があります。
1回あたり講義は約2時間半ですが、それ以外に講座時間内に終わらなかったNotion教材の残りパートと毎週の課題制作時間が別途必要です。
私の場合はUnityに慣れていなかったこともあり、週4-12h程度を別途実施していました。手を動かさなくても自動的に身につくというわけではないため、体験だけでなく「自身の力にしたい」場合、自身のコーディング時間の確保はマストと思います。

#### 私が受講した際の大まかな講義当日の流れ
（※受講者人数や運営内容の修正・改善で適宜変更はあると思いますので、当時の参考として）
- 前週の課題を各自順番に1on1で先生に見てもらいアドバイスをもらう
- その時間、他の受講者はNotion見ながら各自でUnity実装。
- 座学はほぼなく、基本、非常に細かく記載されたNotionを見ながら各自実装し、適宜解説を先生が入れてくれながら黙々と実装していきます
- 例えば、Unity上でのアタッチや設定を間違えた際、LIVE講義だけだと、つまずくと復帰できなかったりしますが、Notion教材で見返すことやその場での質疑、自身の画面を見てもらいながらのアドバイスをもらえるので、安心して最後まで実装ができました。
- Notionと教材動画は、どこに記載コードをアタッチするかなども含め詳しく描写されているため、個人的には私がG'sで受講した講義の中で最も実践に特化していた授業だったと感じましたし、充実した教材でした。
- そのほか、先生が実装上の注意点を語ってくれたり、つまずいた際は質疑を行いながら、その日の教材完成を目指します。
- コードをただ書くだけ、基礎概要から急な詳細内容ではなく、正解コードと解説の記載があり、公式(Unity, Photon)の参照記事などの対応箇所掲載も丁寧に行なってくれていました。
- 動画をきちんと初めから見ていけば完全な初学者でも基礎からよく身につくと感じます。
- 特にPhoton Fusionについては公式以外の公開ドキュメントがあまり充実していないので、実際に先生が最新公式を読んで実装例として指南してくれていることの価値がとても高かったと感じました。


オンラインライブ授業ではゲーム制作を通じて実践的に学びました。以下は学習項目の代表例です。
- キャラクター制作・操作
- アニメーション
- 衝突判定
- sin関数を用いたオブジェクトのランダム回転
- 音を鳴らす
- エフェクト追加
- Photon Fusion活用のネットワーク接続（オンラインマルチプレイ化）
- フリールックカメラの修正
- ジャンプの同期
- エモートの同期
等
（以上、全体カリキュラムの中から一部抜粋であり、実際にはもっと多くの項目があります）

### Step3: 宿題・課題
1日分の教材が2.5時間では終わらない量なので、残りを自学自習しつつ宿題を進めていきます。
その後、１週間ごとにStep2-3のサイクルで繰り返し実践を進めていきます。


# ４. 講座内容紹介
### 事前学習

私の受講時は事前のNotion教材に基づき、基本操作の習熟後、その後のゲーム制作を意識した簡単なキャラクター制作を作る下記内容を実施しました。
1. Unity IDの取得
2. Unity Hubのインストール
3. Visual Studio 2022のインストール
4. UnityEditorのインストール / プロジェクトの作成
5. Unityの基本操作
6. マテリアルの変更
7. prefab
8. C#基礎
9. 当日までの事前課題


### オンラインライブ講義
- 以下、私の受講時のカリキュラム
![image1.png](https://s3-ap-northeast-1.amazonaws.com/peatix-files/event/3398667/cover-rMZBRDdX2PZwvIxIu0O7gQAWneY8zvY3.png)

#### 目的のものを作るために実施する２つの基本
- a) UnityのGUI上で設定を触っていく
- b) ゲームとして深く作っていくために不可欠なC# Scriptを書いていく（※C#自体の学習は本講座では対象外）

#### a) UnityのGUI上で設定を触っていく抜粋例
ひとりでやっているとUnity上のどこにアタッチするのか分からない、といったことがあり躓きがちですが、解説の上で対応画像を丁寧に貼ってくれており、この点かなり安心でした。
![image001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725795/824321ba-2d8b-30ba-b244-a425b2f0314a.png)



#### b) ゲームとして深く作っていく、詳細設定を盛込む場合に不可欠なC# Scriptを書いていく際の例
- Code、解説、必要に応じて関連リファレンスの３つの要素から構成

##### その１：Code部

    private void Start()
    {
        body = transform.GetChild(0);        
    }
    
    private void Update()
    {
        angleValue += 3f * Time.deltaTime;
        body.localRotation = Quaternion.AngleAxis(angleValue, Vector3.up);
    }
    // 以下省略

##### その２：解説
**ゲーム上で動かしたい"とある対象物"に関するコード解説**
Quarterionについての補足解説が講義中でありつつ、Notionがわかりやすく整備されていました。
>プレイヤーの回転を実装した時にも触れたように、`transform.rotation`は`Quaternion`という型で定義されていて、単純に`Vector3`を代入して操作する事は出来ない。
>Unityには回転を制御するメソッドがいくつか用意されているのでそれらを使用する。
>今回はY軸のみを操作するので`Quaternion AngleAxis (float angle, Vector3 axis);`を使用する。

##### その3：公式リファレンス情報の引用
https://docs.unity3d.com/ja/2022.1/ScriptReference/Quaternion.AngleAxis.html

※ リンクがただ貼ってあるだけではなく「ここはXXの理由で読んでおいた方が良い」などのアドバイスが適宜あり

# ５. 成果物
オンラインマルチプレイデモを作り、最終日に受講生と共に体験する流れでした。
子どもは結構喜んでくれていました。すごい受講生は、NFT化と絡めたゲームを作っていて素晴らしかったです。

# 6. 最後に
私自身はUnityの”C#スクリプトを修正して何かする”ということを、ほとんど実装したことがありませんでしたが、G'sの中でも特に詳しい解説と感じるNotion教材と講義を通じて、UnityやPhotonを使った開発についての理解が深まりました。

本講座は下記のような方にとても向いていると思います。
- Unityは初めてだが、興味があり体系的にきちんとやってみたい
- Unityに興味を持っているものの、書籍での学習で挫折した
- UnityはCG制作でしか使ったことがなかったが、表現の幅を増やすためScriptの基礎を学びたい
- Unity Scriptをどのように適用させるか基礎から学びたい
- Unity VFXを触ってみたい
- デジタルツインやメタバースの基礎として、Unityを通じて、基本構造・仕組みを自分で触ってわかっておきたい
- オンラインマルチプレイの基礎を学びたい
- Photon Fusionの良いUnity実装例を探している

###### その他：PCについて
- 特にオンラインマルチプレイなど、リアルタイムの3Dレンダリングでパワーを使うため、できればGPU搭載PCが良いと思います。
- もしUnityを今後しばらくやっていきたい、という方であれば、ここ3年ほどのmacbookも大丈夫かとは思いますが、汎用性を考えると、今現在は、NVIDIA GPU搭載Windows、メモリ16GB以上のPCが長く使えると思います。

以上、本講座を検討している人の判断材料に少しでもなれば幸いです！