「Unityでのゲーム制作で最も重要なことは何か」と聞かれたら、筆者は「コンポーネント」と答えます。前回述べた通り、コンポーネントを適切に扱うことができないと、ゲームオブジェクトが機能しなくなり、ゲームが成り立たなくなるからです。逆に、コンポーネントを組み合わせて適切に使用することができれば、思い通りにゲームを制作することができるようになります。
コンポーネントはゲームオブジェクトの振る舞いを決めるものでした。しかし、現段階では「振る舞いを決めるってどういうこと?」と感じているかもしれません。そこで具体的な例を見るために、この記事ではいくつかのコンポーネントについて説明し、コンポーネントの設定を変更することでゲームオブジェクトの性質を変えてみます。
Unityプログラミング講座一覧はこちら
ゲームオブジェクトを作成する
コンポーネントはゲームオブジェクトの振る舞いを決めるものなので、ゲームオブジェクトがなければコンポーネントを操作することができません。コンポーネントの操作を行う前段階として、ゲームオブジェクトを作りましょう。
ヒエラルキービューで右クリック
してCreate
から3D Object
のSphere
を選びましょう。球体が作成されます。(Sphere
以外でもCube
=立方体、Cylinder
=円柱、Plane
=平面など、いくつかの基本的な立体が用意されています。)
コンポーネントの例
位置・角度・大きさを決めるTransformコンポーネント
すべてのゲームオブジェクトが持っているコンポーネントとしてTransform
コンポーネントがあります。これはゲームオブジェクトの位置情報や角度、大きさを決めるコンポーネントです。インスペクタービューでTransform
の値Position
, Rotation
, Scale
を変えてゲームオブジェクトの位置や角度、大きさが変わることを確認しましょう。
Transform
は頻繁に変更・調整するコンポーネントなのでシーンビューから操作することも可能です。左上にあるマークを選択することで位置、回転、大きさの制御が可能です。
ゲームオブジェクトを生成したときにTransform
の位置が(0, 0, 0)ではない場所にいることがよくあります。そのような時はコンポーネントの右上のメニューからReset
を選ぶことでコンポーネントの値をリセットできます。(回転や大きさも初期値に戻ります。)
物理演算の設定を行うRigidbodyコンポーネント
Rigidbody
コンポーネントを用いることで物理演算が可能になります。つまり、重力をゲームオブジェクトにかけたり、衝撃を与えて動かしたりできます。
先ほど作成したSphere
にRigidbody
をつけてみましょう。インスペクタービューからAdd Component
を選びPhysics
からRigidbody
を選択します。
ゲームオブジェクトにコンポーネントをつけることやデータファイルを設定することをアタッチするということがあります。今回の場合、「RigidbodyをSphereにアタッチする」と言ったりします。
Rigidbody
がついたら再生ボタンを押してみてください。重力がかかって下に落ちていくと思います。
表示の設定を行うRendererコンポーネント
ゲームオブジェクトの見た目の設定を行うRenderer
コンポーネントがあります。このコンポーネントを用いることでゲームオブジェクトの色などを変えることができます。色を変えるにはRenderer
のマテリアル(Material
)の設定を変更します。Default-Material
となっている箇所の右側にある丸をクリックしてマテリアルを変更すると見た目が変わることが確認できます。
マテリアルは自分で作成することができます。プロジェクトビューで右クリックしてCreate
からMaterial
を選んでください。新しいマテリアルが作成されます。マテリアルを選択したらインスペクタービューのAlbedo
を選んで色を変えてみましょう。作成したマテリアルはインスペクター上で設定するか、ゲームオブジェクトにドラッグ&ドロップすることでRenderer
に適用できます。
Renderer
コンポーネントを持っていないゲームオブジェクトはゲーム画面に表示されません。表示はされませんが、ゲームオブジェクト自体は存在しています。つまり、見えない床などのギミックを作りたかったらRenderer
コンポーネントを使用しなければいいのです。実際に見えない床を作ってみましょう。Cube
を新しく作成しSphere
の下に配置します。Renderer
コンポーネントをoffにすれば見えない床の完成です。
衝突の判定を行うColliderコンポーネント
Renderer
をoffにすることで見えない床ができました。では逆に見えるけど触ることのできないゲームオブジェクトを作るにはどうすればいいでしょうか。衝突の判定を行うCollider
コンポーネントをoffにすれば実現できます。
Collider
コンポーネントの設定を変更すれば、当たり判定の範囲を変更することも可能です。例えば、プレイヤーの当たり判定の範囲を表示範囲よりも小さくすれば、敵にかすってもダメージを受けないといった仕様が実現できます。(例えば、Sphere
ならSphere Collider
のRadius
、Cube
ならBox Collider
のSize
の値を変えて遊んでみましょう。)
同じコンポーネントを持つゲームオブジェクトを作成してみよう
ゲームオブジェクトの性質はゲームオブジェクトにつけられているコンポーネントの設定により決まります。ということは、コンポーネントの設定が完全に同じゲームオブジェクトがあれば、それらは同じ性質を持つことになります。ここでは、空のゲームオブジェクトを作成してコンポーネントを設定することでSphere
と同じものにしてみます。
空のゲームオブジェクトを作成する
コンポーネントが最も少ない「空の」ゲームオブジェクトを作成しましょう。ヒエラルキービューで右クリックしてCreate Empty
を選ぶと作成できます。「空」といってもすべてのゲームオブジェクトにはTransform
コンポーネントが必ず付きます。
Transform
コンポーネントの位置をSphere
と同じにしてしまうと重なってしまうので、Position
以外のRotation
とScale
の2つの項目をSphere
と同じにします。
Mesh Rendererを設定する
見た目をSphere
を同じにしてみます。Sphere
についているコンポーネントを見ながら同じ設定をしていけば大丈夫です。まず、Mesh Filter
をアタッチします。次に、Mesh
の項目の右側にある丸をクリックしてSphere
を選択します。最後に、Mesh Renderer
をアタッチしてSphere
と同じマテリアルを設定してあげれば、見た目がSphere
と同じになります。
Mesh(メッシュ)とは3Dの物体をコンピュータで表すのに用いる情報の1つです。メッシュは頂点、辺、面で構成され、物体はメッシュを用いた多面体として表現されます。Mesh RendererはMeshの情報を描画するコンポーネントであり、Meshが設定されていない場合正しく動作しません。
ColliderとRigidbodyを設定する
続いてCollider
とRigidbody
の設定をします。Add Component
からShpere Collider
とRigidbody
をアタッチすれば完了です。すでに使いたいコンポーネントが決まっている場合には検索バーに名前を打つことで素早くコンポーネントを探すことができます。
筆者の小言
「必要になったらその時に調べればいいから覚える必要はない」という人がいますが、私はそうは思いません。覚えれば覚えるほど作業が素早くこなせるようになります。後で楽するためにも覚えられるなら覚えるべきでしょう。ただし、無理に覚えようとして楽しくなくなりやめてしまっては本末転倒ですので注意しましょう。
以上により、空だったゲームオブジェクトはSphere
と同じ性質をもつものになりました。ゲームを再生してみても2つの違いを見つけることはできないでしょう。ためしにSphere
に設定したマテリアルの色を変えてみてください。2つのゲームオブジェクトは同じマテリアルが設定されているため、同時に色が変わるはずです。
まとめ
この記事では、コンポーネントについて説明を行いました。実際にいくつかのコンポーネントについて設定を行い、コンポーネントがゲームオブジェクトの性質を決めるものであることが分かったと思います。次回はいよいよプログラムについて説明します。
Unityプログラミング講座一覧はこちら