こんにちわ、横浜すみっこクリエイター
です。Unityでゲームを制作して販売するまでの軌跡を描くゆにすち!の入門編です!
前々回の記事で、ゲームオブジェクトはただの入れ物にすぎず、その性質や振る舞いはコンポーネントで決まる、と解説しました。今回は、そんなゲーム制作の神髄ともいえるコンポーネントについて学んでいきましょう。
ゆにすち!シリーズとは
このシリーズではUnityでSTEAM販売を目指す!略してゆにすち!と銘打ち、モデリングもプログラミングも企画も販売も何から何までぜ~んぶド素人の が、PCゲームを考え、制作して、販売するまでの風景を履歴として残していくものです。
この入門編では、Unityの基本的な使い方やゲームの構造について学んでいきます。
この記事のポイント!
- コンポーネントは、オブジェクトの振る舞いを決めるプロパティ
- Transformコンポーネントは、消すことができない
- コンポーネントによっては、隠れプロパティがある
- スクリプトもコンポーネントの1つ
Contents
コンポーネントとは
コンポーネントとは、ゲームオブジェクトの振る舞いを決めるプロパティと言い換えることができます。
「【Unity】これでカンペキ!ゲームオブジェクト! | ゆにすち! - 入門編05」で解説したとおり、ゲームオブジェクト自体はただの入れ物です。その入れ物にコンポーネントをアタッチしていくことで、ゲームオブジェクトの素性をカタチ作っていきます。
![ゆにすち(コンポーネントの種類は多岐にわたります)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCeFvGLGHU-x-DRaXHTGKbmcy9voRYCuxMrs67E55fuoRysPNbi4bXz_QfHjgvmApl-lPYwQSpLtbhL8Uz4J9GnHqnveqDnnEfHuY5swHlM11lK9G-uiDZv8U610fnDmaVnNTsaX9a7CmjaEqjgcLQCq_LICiYQyvScBcb2KzshFN2ws7RFjOv0scp/s406/001.png)
上の図のように、コンポーネントはさまざまな種類が用意されています。簡単なところでは、
- 位置や姿勢を決める、当たり判定を持たせる
- 表面の色や凹凸を設定したり、発光体にしたりする
- 挙動や重力、ゲームオブジェクト同士の影響を定義する
- カメラとしての機能を持たせる
- UIとしての機能を持たせる
などがあげられます。
また、パッケージを追加インストールするにより、コンポーネントの種類が増えることがあります。これによって、より魅力的な要素であったり、複雑な機能を簡単にゲームオブジェクトへ与えられるようになったりします。
アタッチされたコンポーネントの確認
![ゆにすち(コンポーネントはインスペクターウィンドウに表示されます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSPBSJsfZITin-BqNmgGgkUOEnlJCxwTzmJCLXEBvlLNzjTTV5QPYuBBDOvWzFmVkFPabT4odN7qmqrHTf_EYMrxWd1xE4VTAvoMeSbfdAQccqhc02GFFBXSXMv9Hc5Di5rkm1T5YaHcYGqwVRMtEL8AOoLrENnwx-OygWJh64kxRySs_6EdewC0cd/s738/002.png)
コンポーネントは、ゲームオブジェクトが選択された状態で、インスペクターウィンドウに表示されます。
インスペクターウィンドウでコンポーネントの設定値を操作することで、ゲームオブジェクトの振る舞いの詳細を決めていきます。
上の図はキューブオブジェクトの例です。プリセットからゲームオブジェクトを作成すると、必要なコンポーネントが追加された状態で生成されます。
キューブオブジェクトには、4つのコンポーネントがアタッチされていることが分かります。これら4つのコンポーネントは、3Dモデルオブジェクトの基本となるものです。
それぞれのコンポーネントがどのような役割を持つのか、確認しておきましょう。
3Dモデルの主要コンポーネント
Transformコンポーネント
![ゆにすち(Transformコンポーネントは位置・姿勢・スケーリングを定義するコンポーネントで、削除することはできません)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3tbPU2vf6R8kixDkqblXZ_AknqQj--F98J8vlw3G4e-8a0iBNPNXHvofOYY2LnH_rUXcVJAseVJYgmBZsm0o5O3JUmYCiEHaHKcOcui7s6hQiHvTG-iXVEapGMgwNxIbhXUr5X4mle5eggdvgwGuisQarpJw7gghAsKiOecA5pn5gL8z4hdnHp4wd/s531/003.png)
Transformコンポーネントは、ゲームオブジェクトの位置・姿勢・スケールを定義するコンポーネントです。
基本的に、コンポーネントの追加・削除は自由ですが、Transformコンポーネントだけは削除できないようになっており、必ず付与されます。
UIとして生成したゲームオブジェクトは、TransformコンポーネントではなくRect Trasformコンポーネントが付きますが、同じように削除できません。小ネタですが、スケールのリンクマークをクリックして、斜線が入っていない状態に切り替えると、縦・横・高さの比率を固定してスケーリングができます。
Mesh Filterコンポーネント
![ゆにすち(Mesh Filterコンポーネントはゲームオブジェクトにモデル形状を与えます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimDp5oFwxGj5mi_5_ThSd3IypjEIiZI1f-JxrAShkoV-dkMcpFNqSfGlcSrl0msbdDQ3fNmaHPQ8JNj50giEpSIcMh5xW4fUh2-lvbDZIEROhCHqUvdtOxl_lvU21apLYOm0ZupOewsQSU4kyfdrIFFxPQv13xhIk1zVe1L4DMilOTN_CqP1VfP21F/s531/004.png)
Mesh Filterコンポーネントは、ゲームオブジェクトの形状を決める役割を与えます。
3Dモデルは、メッシュと呼ばれる三角面の集合体 *1で形状が定義されます。このコンポーネントは、あらかじめ用意しておいたメッシュデータ *2を指定して、ゲームオブジェクトの形状を決めます。
1 曲面に見えても、細かな三角面が集まってできています。 2 メッシュデータは、アセットとして用意します。デフォルトデータはUnityが用意しています。コンポーネント名は、指定したメッシュアセットの名前になるため、キューブの場合はCube(Mesh Filter)となっています。
Mesh Rendererコンポーネント
![ゆにすち(Mesh Rendererコンポーネントは、メッシュを画面上に表示する役割を持ちます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizxwEDuLJCx34yo9wK-ww4pN4VbKDM93rSDdEKZgBeZnpeS39XA9d1gXl9LuH0h9w-cU1tMwkiTugIvXygjiV0Zwm3cVZajpfpSI-l16k9TH0XD4EUBj7aCJHhqGViiTuK0mMiHWM_m_dRpZ28Avyu-DfSLTNWImzN03BzpsLbJWTeUaiqf-pVgIbD/s833/005.png)
Mesh Rendererコンポーネントをアタッチすることで、メッシュが画面上に描画されるようになります。前述した形状情報であるメッシュデータと連動して、メッシュ面をどのように見せるかを決めます。
このコンポーネントには、次の4つのセクションがあります。
- Materials:色や素材感などの設定(アセット指定)*
- ライティング:影の設定
- プローブ:光の受け方の設定
- 追加設定:そのほかの設定
Mesh Filterコンポーネントと混同しやすいのですが、
Mesh Filterコンポーネント:モデル情報(点・線・面の情報のみ)を定義
Mesh Rendererコンポーネント:表面状態などを決めて面を描画
と、役割に明確な違いがあります。
Colliderコンポーネント
![ゆにすち(Colliderコンポーネントは当たり判定を与えます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNWOufNneVIghXqfjOpZyT8o__AnUayIcjsuJR1717_StD-4hf0LAUtwulJbCeircpENUGZ9hp1slIa-SnHnsBAg3WS0Mtoin20JepXBN7Bco85DTCmF7n3EuUJ4u5H54iapSf_4KcNyLkzNutKpJa4UAEAAJmMZ8zHojw2okVu2GE1IkNPHY6NY6a/s491/006.png)
Colliderコンポーネントは、ゲームオブジェクトに当たり判定を付与します。
このコンポーネントをアタッチしたゲームオブジェクト同士は、互いに干渉し合うようになります。両者に当たり判定が必要なので、いずれかにアタッチし忘れると、壁や床をすり抜けたり、敵を通り抜けたりしてしまいます。
ここで注意しなければならないのは、メッシュ形状 と 当たり判定は必ずしも一致しないということです。
![ゆにすち(当たり判定とメッシュが一致しない場合、見た目と挙動が異なってしまいます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsHIRX4CqfRZOH0fjqIcWSRYumMwUVuSx8cXUDS7w-6zMaahv0iz0gtJNvBU-hPXMW5ax8B7VB8utfnLBRLpFHQytdWDjrk1P2QahGDIuC_ZFHK3CcgJ8ncp_MQ3IHljVQ4qFIYN7q37bjUd68tCym6LkQVqBTX0KrMc_k9-OsoYs0lUnKLKcDDZj4/s833/007.png)
たとえば、上の図のようにメッシュ形状 と 当たり判定が不一致の場合を考えてみましょう。
- Mesh Filterコンポーネント: スフェア
- Mesh Rendererコンポーネント:キューブ
とした場合、見えている形状は「球体」ですが、当たり判定はそれよりも大きい「立方体」なので、ほかのゲームオブジェクトにぶつかるときは「球面」ではなく、その外側の当たることになります。当たり判定そのものは、ゲーム画面上出は目に見えないので気をつけて設定する必要があります。
コンポーネントの追加
![ゆにすち(コンポーネントを新たに追加します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvE_P16bmW8c_5OJLQTKKUf9QGJSFaeIuTKXm_oljsi3_Mbvq-9sZT6HCZkU6cImovsoV_KkhfpNCcE_agUIY69vlbX3G0RXCvtY5DJeCQ_zXdDJZBKfULrAf4fMz7azaVm2qzifpAHBt2Rh7HJCbHJamD_ZPX_elWc1zf5kJjR9GcthppTIG0ctcW/s449/009.gif)
コンポーネントを新たに追加するには、コンポーネントを付与したいゲームオブジェクトを選択した状態で、次のいずれかの操作をします。
- インスペクターウィンドウのコンポーネントを追加をクリック
- メニューからコンポーネントをクリック
それぞれ表示されるメニューから、追加したいコンポーネントを選択します。
コンポーネントのリセット
![ゆにすち(バーのメニューから「リセット」をクリックします)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj29xqSQNnUvPt1XC9Jh9l9Em7pH0eys2Xopyb0iw4avGjFCJF3uuzeCznX0JMaaeSEjShnSN60oqTRvNCBs9g8NOFo0k1nI8CSejspLj4LiySYmygAuunUam93swgV-qv1JAO1mxoJ5dDt85dn3WtHeabWGNiYNaKmJsDAmH6v_yCAXcksPjIQBWsB/s455/010.png)
コンポーネントの値を初期させたい場合は、コンポーネントバーを右クリックするか、︙をクリックして、表示されるコンテキストメニューからリセットをクリックします。
位置・姿勢を原点に戻したいときなどに、Transformコンポーネントの数値操作をするよりも早く対応できるので、慣れてくると重宝します。
コンポーネントの削除
![ゆにすち(バーのメニューから「削除」をクリックします)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfbnrEYXSgNIdA0seVJV-B8QA6jj9zUtjK3Vqu41_WVR5eBadNTm3R09qMuhNQVgZD1ciad0LLKbEji0cNk8xYsIMN05BQjypv4WiWoyv6CpxxwE6TXKADNVvaPF-6gT8iZ9S_eWqFDgeKWAVkzQJWhasPvVQxGmlp80qHIgqtBPg18_HFGP3Ccy9A/s455/011.png)
コンポーネントを削除したい場合、コンポーネントバーを右クリックするか、︙をクリックして、表示されるコンテキストメニューから削除をクリックします。
コンポーネントを誤ってつけてしまった場合や、不要になったときに削除します。
繰り返しになりますがTransformコンポーネントなどの位置をつかさどるコンポーネントは削除できません。隠しプロパティの表示
![ゆにすち(バーのメニューから「その他すべてのプロパティを表示」をクリックします)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg47O3-UbgqgnznWZpcsSIt8vj7vTxt2OAFTyiiw2xS5PcimauM-OI933geV8Cj5CXG2KUtslc6eSUGl-5jmqjCzFXTRQjzbUaHy9WdRJqudTVC1UE2Vk_fhUcAVyN17BXnR2jSBuORSzp2M7dzoDQfVAT8J0kxFJMFYjfT8Vfuas_fu92JWIEUq_L_/s455/012.png)
コンポーネントによっては、Unityがあえてすべてのプロパティを表示していないものがあります。
設定の難度が高かったり、頻度が低いと考えられるプロパティは、UIの煩雑さを避けるためにこのような仕様になっていると考えられます。そのコンポーネントが持つすべてのプロパティを表示したい場合は、コンポーネントバーを右クリックするか、︙をクリックして、表示されるコンテキストメニューからその他すべてのプロパティを表示をクリックします。
すべてのコンポーネントが隠しプロパティを持っているわけではありません。おまけ
カスタムコンポーネント
Unityであらかじめ用意されているコンポーネントをビルトインコンポーネントと呼んだりしますが、実は独自のカスタムコンポーネントを作成してゲームオブジェクトにアタッチすることもできます。
![ゆにすち(スクリプトがインスペクターウィンドウ上では、コンポーネントとして機能しています)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhby69cvn-b3a9ZhnIisK8u8dFlFKlScAc8MP11h2iz1cXFHJ3r-z4ZQZCfYX8DwJoYsFyM3JiZdHV0jh-sRlIfXc9zspJsE7cOnRVSfQCPjTcrAbpMsFan68zlWjFuaFwjrOHyZp0kb7_NkNKEd5DGNGV0xZIsW-TLwYjLs2FklSJgCy8bmRi6ND8p/s350/013.png)
スクリプト = コンポーネント
「UnityとVisual Studio Codeの連携! | ゆにすち! - 準備編05」と「【Visual Studio Code】コード入力支援機能の有効化! | ゆにすち! - 準備編06」で少し触れたスクリプトファイル、実はこれがカスタムコンポーネントなのです。ゲームオブジェクトにスクリプトをアタッチすると、コンポーネントとして機能していることが分かります。
![ゆにすち(見映えを変更すると、スクリプトもビルトインに近い見た目になります)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1ZE20sCfidHxv7ncrxjevVHAAhnTDszqMY8xU6y4t_qMCAjj8I87SYGFKcrNaWhKq9z_jWNkXz4r9-Fkm4cBrmJRQXo46HgBZtyws_3JK5SHOYNwrl8oNMYvv2r1ZH9kxHktpsI1086MIt97wHn49Kmup6IGx9QHN7kZ5fqVHfn-72yisNtpCp6Gi/s327/014.png)
コンポーネントの追加の中にもScriptsがあることからも、スクリプトはコンポーネントの一種であることが分かります。
まとめ
今回は、ゲームオブジェクトの性質や振る舞いを決めるコンポーネントについて勉強してきました。
コンポーネントの代表例として、キューブオブジェクトにデフォルトで付与されている4つのコンポーネントの働きを確認しました。またスクリプトが、カスタムコンポーネントであることも理解できたと思います。
少しずつですが雰囲気をつかんできていただけたのではないでしょうか。
次回予告
Next time on... 彩りと素材感を表現しよう。「マテリアル」の簡単な使い方!
今回の記事でも少し登場しましたが、次回はゲームオブジェクトの色や質感などを自在に操れるマテリアルについて解説します。次回もぜひ読んでくださいね!
では、今回はこの辺で。
コメント
コメントを投稿