初心者のためのunity概念図
unityを一年ぐらい使って見てなんとなく概容が見えてきたので、これからunityに挑戦する後輩のためにここにunityの概容図を記す。
1.本記事の目的
unityの初心者向けの教材では手を動かしながら学ぶという趣旨のものが多いが、それだと全体像が見えず学習中に用語同士の関係性がわからず混乱した。その混乱を軽減するために大雑把に全体像を記すことで自分が全体の中で何をやっているかわかるようにする事が本記事の目的である。
2.unityとはなにか
unityとは「ゲーム制作に特化したコンピューターへの指示書作成ツール」である(多くのコンピュータソフトウェアがそうであるように)。
以下に図を示す。
図1のようにまず最初に人の頭の中にゲームのイメージがある。しかしそれをゼロからコンピューターに効率的に指示するためには物理学やコンピュータ科学やグラフィックスなどの膨大な知識が必要になるため、個人には手を出すことが困難である。
その膨大な手間を簡単化してコンピューターへの指示書作成作業を一般人でもできるように補助してくれるツールがunityである。
3.unityの内部構造
unityの要素ごとの関係性は操作画面から直感的に想像しづらい。
そのため以下に初心者が触れる範囲での、要素の関係性を示す。
図2のような階層構造が初心者が触れる要素の相互関係になる。以下それぞれの要素を説明をする。
・スクリプト(C#)
これは図1におけるunityとPCの間の指示を書くもので初心者はあまり触れない(ある程度まともなゲームを作りたければこれにも触れる必要が出てくる)。
unityを使う人が触れるものは(図1における人からunityへの指示に対応するもの)次に説明するコンポーネントである。スクリプトは初心者はあとから学習するか書ける人に頼るかするべきものである。
スクリプトはC#というプログラミング言語で記述され、その読み書きをするためにはC#の教材を学習する必要がある(プログラミングの素養があれば1週間程度で最低限の文法は理解できる)。プログラミングは難しいのでここから入ると挫折する。
・コンポーネント
これが上記で示した指示書作成補助ツールのことでありunityの本体である。
スクリプトという素人では作成が難しい指示書を、コンポーネントという指示書作成補助ツールを使い簡単に操作できるようにしてくれるものである。
コンポーネントはもともと用意されているだけでもたくさんの種類があり、unity学習の最初は、unityが用意したコンポーネントの種類と機能を覚えることから始まる。また、スクリプトを使い自分で作成したり他者が作成したものを使ったりできるため、コンポーネントの種類はこの世に無限に存在する。
unityでゲームを作る場合の作業の多くは適切なコンポーネントの選定と設定を考える作業になる。
実体としてはスクリプトの中でMonoBehaviourクラスを継承したクラスの事をコンポーネントと呼んでいる。つまりコンポーネントとはスクリプトの一種であるともいえる。
・オブジェクト(アセット)
複数のコンポーネントを一つにまとめるためのフォルダのようなものがオブジェクトである。unityを学び始めたときはオブジェクトがunityの本体だと勘違いするが、実際の本体はあくまでコンポーネントであり、オブジェクトは複数のコンポーネントを一度に扱うための入れ物に過ぎない。
また、作成したオブジェクトを他者に配布するなど、再利用性を考慮して作られたオブジェクトのことをアセットと呼ぶ。機能的にはオブジェクトもアセットも同じものである。
・シーン
オブジェクトをまとめておいておく場所である。また光の計算や背景の設定や重力の設定などの機能もシーンに含まれている。unityの操作画面ではシーンの設定は目立たないがシーンに設定できることは結構多い。
・unityプロジェクト
シーンやアセットなどの全体のパーツを統合して一つのゲームにする最上位のまとまりである。
unityプロジェクトを指定のプラットフォーム(androidoOSなど)にビルド(配布用に最適化する作業をビルドと呼ぶ)することでゲームを配布用の形にすることができる。
4.まとめ
まとめると、unityは指示書作成ツールであり、その機能の本体はコンポーネントである。初心者はまずはunityに最初から用意されているコンポーネントを覚える作業から入り、配布されているコンポーネントを手に入れるかもしくは自分でスクリプトを書いて作成するという作業になる。操作画面からは理解しずらいので、本記事で図を記した。