Unityで3Dゲームを作るまでのいろいろな処理を解説する連載。今回は、本格的なゲームを作るのに必要となる、衝突判定とCollider、複数Tagの使い方など実用的なテクニックを解説する【Windows 10、Unity 5.4に対応。C#のコードを追加】。
Unityで3Dゲームを作るまでのいろいろな処理を解説する本連載「ゲーム開発初心者のためのUnity入門」。前回記事では無数のゲームオブジェクトを動的に作成したが、本格的なゲームを作成する場合は、最初から(静的に)複数の3Dキャラクターやゲームオブジェクトを用意することになるだろう。その場合は、複数のゲームオブジェクトに「タグ」(Tag)付けすると判別しやすくなる。
そこで今回は、キャラクターにタグを指定して、処理を適用させるキャラクターの判別を行う。
具体的には、前回も使用した、「Unity Mask Man」(以下、Unityマン)と複数のモンスターを使って、Unityマンがモンスターを撃退する処理を解説する。
また、今回は連載第5回の「Box Colliderで当たり判定」で少しだけ紹介したColliderについて解説します。Colliderとは英語で「衝突装置」などと訳され、Unityではゲームに欠かせない衝突判定(当たり判定)を行うときに使うコンポーネントだ。
ColliderにはBoxCollider、SphereCollider、CapsuleCollider、MeshColliderがあり、それぞれ、Cube、Sphere、CapsuleとCylinder、Planeにデフォルトで設定されている。実は、これまでの連載でもたびたび出てきたオブジェクトCube、Sphere、Planeには全てColliderが設定されていたのだ、
一方で、デフォルトのColliderとは異なるColliderを設定することも可能だ。今回はその方法を解説する。
また、衝突が起きたときはスクリプトで関数を呼び出すことになり、その中で処理を行わせるのがよくある使い方だ。関数の使い分け方についても解説する。
今回のプロジェクト名は、「UnitymanAndSpecter」とした。「Create project」ボタンをクリックすると、「UnitymanAndSpecter」のプロジェクトのScene画面が表示される。この画面内でサンプルを作っていこう。
今回Asset StoreからダウンロードするAssetは下記の3つだ。
今回は有料のAssetも使うことにしたが、もちろん無料でも構わない。Assetのインポート方法については、連載で何度も説明しているので省略する。分からない方は、これまでの連載を参照してみてほしい。全てをインポートするとProjectの中身は図1のような構造になる。
一度Asset Storeからインポートしたファイルは、下記フォルダの中にunitypackageファイルとして保存されている。
C:\Users\{ユーザー名}\AppData\Roaming\Unity\Asset Store-5.x
いちいちAsset Storeに入らなくても、Unityメニューの「Assets」→「Import Package」→「Custom Package」で、上記フォルダにあるunitypackageファイルを指定するとインポートできる。
しかし、Asset StoreのAssetはバージョンアップしているときもあるので、この連載では、その都度Asset Storeからインポートする方法を採っている。
上記フォルダに「.unitypackage」ファイルが存在する場合は、Assetには「Import」ボタンが表示される。上記フォルダの「.unitypackage」ファイルを削除すると、Assetのボタンは「Download」になる。
次に、Unityマンとモンスターたちを配置する舞台を作成する。今回は、Hierarchyの「Create」→「3D Object」→「Plane」を選択する。「Plane」を選択し、表示されるInspectorから「Transform」の「X」に「3」、「Z」に「3」と指定して、舞台を少し広くしておく(図7)。
このPlaneにはInspectorの「Add Component」から「Box Collider」を追加しておく。デフォルトで追加されている「Mesh Collider」だと処理が重いためだ。
「Box Collider」を追加して「Mesh Collider」をそのままにしておくと、実行時にエラーが発生するので、この「Mesh Collider」は右端の「歯車アイコン」をクリックして表示される、「Remove Component」で削除しておく。
また、Inspectorの「Add Component」から「Rigidbody」も追加し、「Is Kinematic」にはチェックを入れておこう。Colliderを設定した上で、このチェックを付けておかないと、実行した際にPlane(舞台)が下に落ちてしまうので、注意が必要だ。
今回のサンプルは、最初の状態ではモンスターたちは表示されておらず、Unityマンが、ある境界線を越えるとモンスターたちが出現するようにしている。そのための境界線を設定する。
Hierarchyの「Create」→「3D Object」→「Cube」をScene画面内に配置し、トランスフォームツールの「スケール」ツールを使って、図3のようにしておく。
Inspectorから、このCubeの名前を「Border」と変更しておこう。
次に、この「Border」が表示されていては邪魔になるので、これを消す必要がある。Inspector内の「Mesh Renderer」の右隅にある「歯車」アイコンをクリックして表示される、「Remove Component」を選択する(図4)。
すると「Border」の枠線だけが表示されたような感じになる。これは非表示となっており実行時には見えない(図5)。
最後に、「Border」のInspector内の「Box Collider」の「Is Trigger」にチェックを付けておこう(図6)。これをチェックすることで、Unityマンがこの境界線に接触した時点で「OnTriggerEnter」関数(後述)が呼び出され、妖怪たちを出現させる処理をスクリプトで書くことができる。
これで境界線の設定は終わりだ。次は、いよいよキャラクターを配置していく。
Copyright © ITmedia, Inc. All Rights Reserved.