る
作成したItemタグをItem(1)~Item(6)に設定しましょう。先ほどの作
業で一覧にItemタグが追加されています。
1. ヒエラルキービューでItem(1)を選択
2. インスペクタービューでタグをItemに設定 3. オーバーライド→すべてを適用するを選択
オーバーライド→すべてを適用するを行うことで、同じPrefabである Item(2)~Item(6)すべてに設定が適用されます。
67
Item をカウントする機能を追加
GameControllerにItemのタグを持つオブジェクトをカウントする機能
を追加します。GameControllerオブジェクトにGameControllerコン ポーネントを作成して追加しましょう。
1. ヒエラルキービューでGameControllerを選択
2. インスペクタービューでコンポーネントを追加を選択
3. 新しいスクリプトを選択し、名前をGameControllerにして作成して 追加を選択
4. プロジェクトブラウザのAssetsフォルダー内に作成された GameControllerをScriptフォルダーに移動
5. GameControllerをダブルクリックして開く
GameControllerに以下のようにコードを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
} }
68
残りのアイテム数を、UIのScoreLabelに表示するようにします。
まずはGameControllerからTextコンポーネントへアクセスする方法と
して、Textコンポーネントへの参照を設定する方法を利用します。
まずは参照に使用するコードを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
public UnityEngine.UI.Text scoreLabel;
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
} }
69
次に取得したItem数をtextに代入します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
public UnityEngine.UI.Text scoreLabel;
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
scoreLabel.text = count.ToString ();
}
}
70
け
作成したGameControllerとScoreLabelを紐付けます。
1. ヒエラルキービューでGameControllerを選択
2. ScoreLabelをScoreLabelの欄へドラッグ&ドロップ
ゲームを再生してみてください。画面左下に残りのアイテム数が表示 され、プレイヤーがアイテムを取得する度にアイテム数が減ることが わかりますね!
71
クリア時の UI を作成
次は、アイテム数と同じUIテキストの機能を使ってクリア時(アイテ ムをすべて取った時)の表示を作成します。
1. ヒエラルキービューの作成→UI→テキストを選択 2. 名前をWinnerLabelに変更
72
続いてWinnerLabelの内容を設定します。
1. ヒエラルキービューでWinnerLabelを選択
2. インスペクタービューで短形トランスフォームを以下の値に設定
● 位置X:0
● 位置Y:0
● 位置Z:0
● 幅:300
● 高さ:100
3. テキスト欄にYOU WINと入力 4. フォントサイズを60に設定
73
クリア条件の設定
続いてGameControllerに少し手を加えてクリア条件を設定します。
今回のゲームではアイテムを全て回収する=残りのアイテムが0にな ることが勝利条件です。シーン内にItemタグを持つオブジェクトが見 つからなかったら(全てなくなったら)勝利とします。
1. プロジェクトブラウザでGameControllerをダブルクリックして開 く
2. コードを以下のように修正
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
public UnityEngine.UI.Text scoreLabel;
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
scoreLabel.text = count.ToString ();
if (count == 0) { // クリア時の処理 }
} }
74
参照を設定
最後にクリア時に初めて「YOU WIN」の文字が表示されるようにしま す。今回もWinner Labelへの参照が必要ですが、今までと同様にエ ディター側で設定します。
GameControllerを以下のように修正します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
public UnityEngine.UI.Text scoreLabel;
public GameObject winnerLabelObject;
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
scoreLabel.text = count.ToString ();
if (count == 0) { // クリア時の処理 }
} }
GameControllerからWinnerLabelへの参照を設定します。
1. ヒエラルキービューでGameControllerを選択
2. ヒエラルキービューのWinnerLabelをインスペクタービューの GameControllerコンポーネントのWinner Label Objectへドラッグ&
ドロップ
75
ここでゲームを再生してみましょう。YOU WINの表示が最初から出て しまっていますね。
76
クリア条件を満たすまで、YOU WINを非表示にします。
Unityで描画されているものを非表示にする方法はいくつかあります
が、今回はオブジェクトを非アクティブにする事で非表示にします。
1. ヒエラルキービューでWinnerLabelを選択
2. インスペクタービューでオブジェクトのチェックを外す
これでシーンビューやゲームビューからもYOU WINの表示が消えまし た。
77
クリア時に「 YOU WIN 」と表示する
クリア時に非アクティブの「Winner Label」をアクティブにすること で、ゲームクリア時にYOU WINと表示します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassGameController : MonoBehaviour {
public UnityEngine.UI.Text scoreLabel;
public GameObject winnerLabelObject;
publicvoidUpdate() {
int count = GameObject.FindGameObjectsWithTag ("Item").Length;
scoreLabel.text = count.ToString ();
if (count == 0) {
// オブジェクトをアクティブにする
winnerLabelObject.SetActive (true);
} } }
78
ゲームを再生してみましょう。プレイヤーがすべてのアイテムを取 り、アイテム数が0になるとYOU WINの文字が表示されるようになり ましたね!
しかし、これだけではただアイテムを集めるだけの作業になってし まっていて面白みに欠けます。最後の仕上げとして、接触してはいけ ない障害物を作成しましょう。完成まであとひと息です!
79
障害物の作成
まずは障害物の3Dモデルを作成します。
DangerWall プレハブの作成
1. ヒエラルキービューの作成→3Dオブジェクト→キューブを選択 2. 名前をDangerWallに変更
3. ヒエラルキービューのDangerWallをプロジェクトブラウザのPrefab フォルダーにドラッグ&ドロップしてPrefabのDangerWallを作成
80
DangerWallは接触してはいけない危険な壁です。より危険度が高く見 えるよう「光る壁」としてマテリアルを設定します。
1. プロジェクトブラウザで作成→マテリアルを選択 2. 名前をDangerWallMaterialに変更
3. DangerWallMaterialをMaterialフォルダーに移動 4. インスペクタービューで以下を設定
● アルベド(Albedo):赤や黄色など危険色(地面や壁とは別の色 にする)
● 放出(Emission):チェックを入れ、色をアルベドと同様の色を 設定。強度(Intensity)を1.3に設定
81
5. DangerWallMaterialをヒエラルキービューのDangerWall(またはシー ンビューのDangerWallオブジェクト)へドラッグ&ドロップ
6. ヒエラルキービューのDangerWallを選択し、インスペクタービュー
のオーバーライド→すべてを適用するを選択
82
83
DangerWall の配置
DangerWallのサイズと位置を調整しましょう。
1. ヒエラルキービューのDangerWallを選択
2. インスペクタービューのトランスフォームコンポーネントを以下 のように設定
● 位置(Position) :X:4 Y:0.5 Z:3
● 回転(Rotation) :X:0 Y:0 Z:0
● 拡大/縮小(Scale) :X:10 Y:1 Z:1
このとき、調整したDangerWallがItemと重なってしまうとクリアでき なくなります。もし重なる場合はItemの位置を少しずらしましょう。
84
DangerWallを複製し、位置・回転・拡大/縮小の数値を調整してステー ジ内に配置してみましょう。この部分は好きなように複製、配置して 構いません。ここでは例として以下のように設定してみます。
1. ヒエラルキービューのDangerWallを選択し、右クリックして複製 を選択
2. さらにもう一度複製を選択し、DangerWallオブジェクトを合計3個 にする
3. DangerWallオブジェクトの名前をDangerWall 1、DangerWall 2、 DangerWall 3に変更
4. それぞれの位置・回転・拡大/縮小の数値を調整
DangerWall 1
* position (x:4, y:0.5, z:3) rotation (x:0, y:0, z:0) scale(x:10, y:1, z:1) DangerWall 2
* position (x:4, y:0.5, z:-4) rotation (x:0, y:0, z:0) scale(x:10, y:1, z:1) DangerWall 3
* position (x:-5, y:0.5, z:4) rotation (x:0, y:90, z:0) scale(x:10, y:1, z:1)
ゲームを再生して、DangerWallとItemが重なっていないことを確認し ましょう。この時点ではDangerWallはただの壁で、接触しても何も起 こりません。
85
DangerWall の整理
DangerWallオブジェクトが増えてきましたね。Item同様、空のゲーム
オブジェクトを作って整理しましょう。
1. ヒエラルキービューの作成→空のオブジェクトを作成を選択 2. 名前をDangerWallsに変更
3. DangerWallオブジェクトを全てDangerWallsへドラッグ&ドロップ
DangerWall と Stage の静的( static ) 化
先ほどマテリアルで設定した放出(Emission)による発光エフェクト は、発光する側のオブジェクトと光を受けるオブジェクトの両方を静
的(static)に設定することで効果を発揮します。