この記事を読んだ方がいい人
- Unity本気で勉強したいけど,無駄な努力したくない人
- 技術本で動くプログラムは作ったけど結局、理解はできなかった人
- 暗記は不得意だから、Unityの全体像をつかみたい人
この記事を読むとどうなるか
- Unityの全体の仕組みが理解できる
- より深くUnityの本質的なことを知ることができる
- Unityの学習の時間を短縮できる
記事の信頼性
- Unity歴3年である
- すべてUnityを独学で学習している
- プログラミング講師やARの案件の経験がある
初めまして! J(じぇい) です!僕の知識が皆さんの助けになれば嬉しいです。
「2年目のヤツが何言ってんだよ」
と聞こえてきそうです。
ですが「プロが初心者に寄り添う」のは難しいです。だから「僕が寄り添って」丁寧に書くのには十分意味があります。
目次:ロードマップ① (学習の全体像)
全体像
学習の目次
- ロードマップ
- Unityの学習に初心者が挫折するのはなぜ?
- プログラミングとゲーム
- 3つのつながり
- Unityのゲーム作り
- ❶モノ:空間のつながり
- プロジェクト (Project)
- シーン (Scene)
- ゲームオブジェクト (GameObject)
- コンポーネント (Component)
- ❷機能:言葉のつながり
- Unity (図書館)
- ネームスペース (本棚)
- クラス (本)
- メソッド (目次)
- 定義 (文章)
- ❸動作:時間のつながり
- MonoBehaviour
- C#の継承
- Unityの全体像
- 言葉と空間のつながり
- 言葉と時間のつながり
- 3つのつながり
- まとめ
Unityの学習に初心者が挫折するのはなぜ?
Unityの独学は辛い
それは「何が分からないか」が分からないからです。
そしてそれは、Unityの「全体像」が分からないからです。
※これから解説するのは「プログラミングのやり方」ではありません。Unityの「全体像」です。自作なので教材意見はコメントいただけると嬉しいです。
Unity:プログラミングとゲーム
ゲームとWebページの差はなんでしょう?
何が違うのでしょうか?いいですか?
ゲームには「空間」と「時間」があります
- Webページ
- プログラミング(=言葉) で「ページ」を作る
- ゲーム
- プログラミング(=言葉) で「空間と時間」を作る
「空間」と「時間」を「言葉」で表現するために、Unityはある
これが頭に無かった皆さんは「赤は止まれ」の「理由を知らないまま」止まっていた危ない人です。本質的なことをしっかり理解しましょう。
Unityの学習で最初に理解して欲しい「3つのつながり」
Unityのプログラミングはこの3つで「全てつながっています」
- 空間のつながり
- 言葉のつながり
- 時間のつながり
Unityはこの3つで説明がつきます。
僕はこの感覚を掴むのに2年かかりました。しかも複雑につながっているので誰も簡単に説明できません。調べてヒットするのはやり方だけです。
Unityのゲーム制作
さて、今からUnityでゲームを制作する皆さんは
- 「モノ」を置いて
- 「機能」を付けて
- 「動作」をさせる
これの繰り返しです。これがゲームを作る手順です。
① モノ:空間のつながり
Unityの「機能」は全て「モノ」につながっています
階層構造
- プロジェクト (Project)
- シーン (Scene)
- ゲームオブジェクト (GameObject)
- コンポーネント (Component)
複雑な「処理」を「空間・モノ」単位でグループ分けする為のUnityの仕組みです。
- 「プロジェクト(=ゲーム)」は
- 「シーン(=空間)」の集まりで構成され,そこに
- 「ゲームオブジェクト(=モノ)」を配置し
- 「コンポーネント(=機能)」をつけることで動作を作る。
プロジェクト (Project)
「ゲーム自体」のことです
ゲーム1つを構成するデータ全てが入った「開発ファイル」のことを指すことさします。これをUnityが起動します。
シーン (Scene)
現実世界における「空間」のイメージに近いです。
ただ誤解しやすいのは、ここで言う「シーン」は「場面」のことではなく,概念的な「空間」です。なので「シーン」自体には、何もありません。
ここに「ゲームオブジェクト」を配置していきます。
ゲームオブジェクト (GameObject)
現実世界における「モノ」のイメージに近いです。
ただ誤解しやすいのは,ここで言う「モノ」は「物体」のことではなく、概念的な「モノ」です。なので「ゲームオブジェクト」自体には「位置情報」があるだけで,何もありません。
ここに「コンポーネント」をつけていきます。
コンポーネント (Component)
現実世界における「機能」のイメージに近いです。
ただ誤解しやすいのは,現実世界では当たり前のことも,ゲームでは「機能」として,用意します。
「四角い形を見せる機能」「見る機能」「光を当てる機能」この全部がモノとして空間に配置されて、「箱」が「ゲーム画面」に「見える」わけです。
② 機能:言葉のつながり
全ての「機能・動作」はあらかじめ「定義」してあります。
皆さんはそれを,呼び出して使うだけです。
階層構造
- Unity
- ネームスペース
- クラス
- メソッド
- 定義
膨大な「処理文を使いやすくする」為の,プログラミング言語の仕組みです。
- 「Unity(=ゲーム開発ソフト)」の中の
- 「UnityEngine(=Unityの基本処理集)」というネームスペースには
- 「Rigidbody(=物理動作の機能)」というクラスがあり,その
- 「AddForce(=力を加える動作)」というメソッドを使用して力を加えるプログラムを使用する
Unity (図書館)
Unityは「図書館」の様にプログラム文を保管しています。
ネームスペース (本棚)
図書館から探しやすくするため「本棚」の様にネームスペースでカテゴリ分けされています。
クラス (本)
クラスには「本」の様に,プログラム文がひとまとまりになっています。「クラス」は「コンポーネントとほぼ同じ」です。
メソッド (目次)
メソッドは「目次」の様に,実際に読みたい文を呼び出しやすくする為にあります。
定義 (文章)
定義は,上記の道筋でつながって呼び出される「実際に動作するプログラム文」です。
③ 動作:時間のつながり
全ての「動作」はつながっています
メソッドはプログラムの「動作」のことです。
階層構造
- MonoBehaviour(クラス) の指定のメソッド
- メソッド
- メソッド
- メソッド
別々のモノを「同じ時間軸で動かす」為に「C#の継承」を利用した「Unity」の仕組み
- 「メソッド(=動作)」を動かしているのは「メソッド(=動作)」で
- その「メソッド(=動作)」を動かしているのは別の「メソッド(=動作)」で
- その「メソッド(=動作)」を動かしているのは別の「メソッド(=動作)」で
- ・・・
この様に繋がっています。
疑問:「MonoBehaviour」ってなに?
Unityが用意した「クラス」です。このクラスの主な「機能」は「動作を開始させること」です。
疑問:「継承」ってなに?
C#で使用できる「クラスの書き方」です。この書き方をすると、「Aクラスの機能有りき」でBクラスを作ることができます。
疑問:「MonoBehaviour」を「継承」するとは?
Unityでは「動作を開始させる+機能有りき」でクラスを作ることで、MonoBehaviourクラス自体を変更することなく、1つで全ての動作を開始・連鎖させゲームを動かします。つまり時間を管理しているのです。
Unityの「全体像」
空間と言葉のつながり
クラスとコンポーネントは同じ
その他は全く別物です。
言葉と時間のつながり
メソッドはつながっている
プログラムの中のメソッドはMonoBehaviourから全てつながっています。
Unityの3つのつながり
学習の全体像
- 「モノ」を置いて
- 「機能」を付けて
- 「動作」をさせる
我ながら1つの画像でUnityの全体像をとらえた秀逸なイラストだと思います。
まとめ
全体像が掴めない方は繰り返し見てもらえればと思います。
全体像が分かるとUnity学習がかなりはかどる
これが理解できたら、後は書いて具体的なコードを使って慣れるだけです。
僕の2年間を皆さんは5分間でショートカットできたかと思うと羨ましい限りです。皆さんのゲーム開発を心から応援しています。
僕の「ARダンサーを目指す活動」も応援いただければと思います
最後まで読んでいただき,ありがとうございました。
コメントを残す