す。
1. ヒエラルキービューでItem(1)を選択
2. インスペクタービューでコンポーネントの追加→ 新しいスクリプト を選択
3. 名前をItemScriptに設定し作成して追加を選択
4. プロジェクトブラウザのAssetsフォルダー内に作成されたItemScript
をScriptフォルダーにドラッグ&ドロップ
5. ItemScriptをダブルクリックして開く
接触判定の関数は2種類あります。
● OnTriggerEnter :物理的な反射を持たないTriggerとの接触判定
● OnCollisionEnter :物理的な反射を持つColliderとの接触判定
プレイヤーとアイテムが接触したときにスルッと抜けて欲しいので OnTriggerEnterを使って実装します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassItemScript : MonoBehaviour {
// トリガーとの接触時に呼ばれるコールバック voidOnTriggerEnter(Collider hit) {
} }
53
Item の接触判定を Trigger に変更
判定方式をTriggerにしたため、接触判定もTriggerに設定する必要があ ります。 Item (1)のColliderをTriggerに設定します。
1. ヒエラルキービューのItem (1)を選択
2. インスペクタービューのカプセルコライダー(CapsuleCollider)コ ンポーネントのトリガーにする(Is Trigger)にチェックを入れる
54
先ほどの処理で、Item(1)があらゆるTriggerとの接触判定を行うことが できるようになりました。しかし今回、Item(1)と接触判定を持つのは
Playerのみとしたいです。
いくつかの方法があるのですが、今回はシンプルで汎用的なタグを確 認する方法を使います。OnTriggerEnterの引数であるhitには、接触対 象の情報が含まれます。この接触対象のタグを調べ、Playerならば特 別な処理を行うようにItemScriptを以下のように修正します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassItemScript : MonoBehaviour {
// トリガーとの接触時に呼ばれるコールバック voidOnTriggerEnter(Collider hit) {
// 接触対象はPlayerタグですか?
if (hit.CompareTag ("Player")) { // 何らかの処理
} }
}
55
Player にタグを設定する
Playerオブジェクトにタグを設定してみましょう。
1. ヒエラルキービューでPlayerを選択
2. インスペクタービューのタグ(Tag)をPlayerに設定
56
プレイヤーがアイテムに接触したらアイテムが消えるように設定しま す。消える=シーンからの削除にはDestroyメソッドを使用します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassItemScript : MonoBehaviour {
// トリガーとの接触時に呼ばれるコールバック voidOnTriggerEnter(Collider hit) {
// 接触対象はPlayerタグですか?
if (hit.CompareTag ("Player")) {
// このコンポーネントを持つGameObjectを破棄する Destroy(gameObject);
} } }
57
Prefab の更新
ここまでItem(1)を使って調整してきました。先ほどと同じように、こ
の調整を他のItem(2)~Item(6)にも適用します。
1. ヒエラルキービューでItem(1)を選択
2. インスペクタービューでオーバーライド(Overrides)を選択し、
すべてを適用する(Apply All)を選択
ゲームを再生してみましょう。アイテムに接触するとアイテムが消える ことがわかります。ゲームらしくなってきましたね!
58
ヒエラルキービューのItem(1)~Item(6)を整理しましょう。
1. ヒエラルキービューで作成→空のオブジェクトを作成を選択 2. 名前をItemsに変更
3. Item(1)~Item(6)をすべて選択し、Itemsへドラッグ&ドロップ
59
「残りのアイテム数」を表示する UI の 作成
UI(ユーザーインターフェース)は、主にゲーム中の画面に表示され る数字や文字を指します。ここでは画面左下に残りのアイテム数を表 示するUIを作成します。
60
まずはUIを表示するCanvasを用意します。
1. ヒエラルキービューの作成→UI→キャンバス(Canvas)を選択
シーンビューでは巨大なキャンバスオブジェクトが確認できます。UI は他の3Dモデルと違い、ゲーム中の画面の手前に表示されるので、巨 大であることは無視してください。
61
キャンバスのサイズを設定します。
1. ヒエラルキービューでCanvasを選択
2. インスペクタービューでキャンバススケーラ(CanvasScaler)のUI スケールモード(UI Scale Mode)を画面サイズに拡大(Scale With Screen Size)に設定
62
UIに表示するテキスト(文字や数字)を設定します。
1. ヒエラルキービューの作成→UI→テキスト(Text)を選択 2. 名前をScoreLabelに変更
※作成したテキスト(Text)は自動的にCanvasの子オブジェクトとなり ます。
現在はデフォルトのNew Textというテキストが表示されています。ま ずは表示位置を左下へ移動し、フォントの大きさを調整します。
1. ヒエラルキービューでCanvas→ScoreLabelを選択
2. 短形トランスフォーム(RectTransform)の値を以下のように設定
● 位置X(PosX):-230
● 位置Y(PosY):-230
● 位置Z(PosZ):0
● 幅(Width):300
● 高さ(Height):100
3. テキスト(Text)コンポーネントのテキスト(Text)欄に0と記入 し、フォントサイズ(Font Size)を60に設定
63
64
次に、シーン内の残りのアイテムの数を、先ほど作成したScoreLabel に通知して表示する仕組みを作成します。
この機能を実装する方法は無数にありますが、今回は一番簡単な
GameControllerに管理させる方法を使います。アイテム数のような
ゲーム全体の進行に関する機能はGameControllerが持つのが望ましい です。このGameControllerがシーン内のアイテム(Item)の残数を数 え、変更があればScoreLabelに通知するという仕組みです。
ではGameControllerを作成していきましょう。
1. ヒエラルキービューの作成→空のゲームオブジェクトを選択 2. 名前をGameControllerに変更
3. インスペクタービューでタグをGameControllerに設定
65