障害物ランを作ろう~9~の続きです。
ゴールの判定エリアを作ります。伏線になるので、この記事の内容がよくわからなくても大丈夫です。
前提条件
【Unity3Dサンプルゲーム】障害物ランを作ろう~9~まで終わらせておいてください。
今回の流れ
- Cubeを作成
- 名前を【GoalPoint】に変更
- 【GoalPoint】の位置・大きさ変更
- 【Mesh Renderer】を無効化する
- 【Is trigger】をチェックする
- 【GoalPoint】にスクリプトの追加,アタッチする
- 【GoalPoint】スクリプトを開く
- スクリプトを書く
一つ前のステージ外に落ちたら、リスタートする作業と同じような作業を行います。
Cubeを作成
●Cube作成方法
【Hierarchy】→【Create】→【3D Object】→【Cube】
名前を【GoalPoint】に変更
●Cubeの名前変更
【Cube】→【右クリック】→【Rename】→【GoalPoint】
名前の変更の仕方がわからない方は戻るか、【unity】物体(ゲームオブジェクト)の名前変更をわかりやすく説明をご覧ください
【GoalPoint】の位置・大きさ変更
●【GoalPoint】の位置、大きさを調節
【GoalPointを選択】→【Inspector】→【Transform】→【上記のように数値を変更】
位置大きさの変更の仕方がわからない方は戻るかゲームオブジェクトの位置・角度・大きさを変更する【Transform】の使い方をご覧ください。
大きさ・位置を調節すると上のようなものができます。【GoalStage】と【GoalPoint】がかさなっています。
【Mesh Renderer】を無効化する
●【Mesh Renderer】を無効化する
【GoalPoint】→【Inspector】→【Mesh Renderer】→【左上のチェックを外す】
先ほど作った【GoalPoint】を見えない形にしましょう。ゲームしているときに見える必要がありませんからね。
見えると気が散りますし。見えない形=透明にします。
【Is trigger】をチェックする
●【Is triggerにチェックする】
【OutStage】→【Inspector】→【Box Collider】→【Is triggerにチェックする】
なぜ【Is trigger】をチェックするのか?
【Is trigger】をチェックすることで、当たり判定機能を機能をONにしてくれます。当たり判定をONにすることで
【GoalPoint】にあたったら〇〇する
ということをスクリプト(プログラミング)で操作できるようになります。
【GoalPoint】にスクリプトの追加,アタッチする
●【GoalPoint】にスクリプトの追加,アタッチする
【GoalPoint】→【Inspector】→【Add Component】→【New script】→【Goalを入力】→【Create and Add】
アタッチというのは、【GoalPoint】にスクリプトを繋げることです。
【New script】が見つからない方は、上の検索欄にscriptと入力すればでます。
もし名前を入力するところの下にLanguageという欄があったら、【C sharp】を選択してください。
【Goal】スクリプトを開く
●【Goal】スクリプトを開く
【Projectウィンドウ】→【Assets】→【Goalをダブルクリック】→【Visual StudioかMonoDevelopが開く】
Visual StudioかMonoDevelopどっちが開いても同じコードを入力してください。自分はVisual Studioです。
スクリプトを書く
以下のコードを書いていきます。コードが小さくてごめんなさい。お使いのブラウザで拡大してご覧ください。検索すれば出ると思われます。
あと、最後の「}」を忘れないでください。「//」はコメントなので、実行されません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Goal : MonoBehaviour
{
//変数宣言
public static bool goal; // 1.goal変数がtrueのときにゴールしたとする
// Use this for initialization
void Start()
{
goal = false; // 2.最初のgoalの値をfalseにする
}
// 3.もし誰かが自分(GoalPoint)にぶつかったと
void OnTriggerEnter(Collider col)
{
// 4.「Player」タグを持っているオブジェクトと接触したとき
if (col.gameObject.tag == "Player")
{
goal = true; // 5.goalの値をtrueにする
}
}
}
スクリプトの説明
1.変数宣言
public static bool goal; // 1.goal変数がtrueのときにゴールしたとする
ゴールをしたのか、してないかを判断するための変数を設定します。
変数名はなんでもいいのですが、ここではわかりやすいように「goal」という変数名にします。
「goal」の値が「true」
→ゴールしている状態
「goal」の値が「false」
→ゴールしていない状態
とします。
2.ゲーム開始時のgoalの値をtrueにする
void Start () {
goal = false; // 2.最初のgoalの値をfalseにする
}
void Start () {} | 最初の状態を書く |
---|---|
goal = false; | goal変数をfalseにする |
最初の状態を書きます。ゲーム開始時点はまだゴールをしていないので「goal」変数の値を「false」にしています。
まとめると、ゲーム開始時点はゴールをしていない状態にするよ
3・4・5.当たり判定でどんな処理を行うか
// 3.もし誰かが自分(GoalPoint)にぶつかったと
void OnTriggerEnter(Collider col)
{
// 4.「Player」タグを持っているオブジェクトと接触したとき
if (col.gameObject.tag == "Player")
{
goal = true; // 5.goalの値をtrueにする
}
}
【OnTriggerEnter】は誰かが自分(GoalPoint)に接触したときに実行されます。その誰かというのを「3」で説明しています。
ここでは「Player」というタグをもつオブジェクトが接触したときの処理を書いています。
前にプレイヤーに「Player」というタグを設定しましたよね。その「Player」というタグがここでも利用されています。
「5」で「goal」の値を「true」にしています。これでゴールしたと判断します。
まとめると、誰かが自分に接触したときに実行されるよ→誰かというのは「Player」タグをもったオブジェクトだよ→なにが行われるかというとgoalの値がtrueになるよ
スクリプト全体を言葉で説明
ゴールしたか判断する変数「goal」を用意するよ→ゲーム開始時は「false」にしてゴールしてないよ→「Player」タグをもった人がぶつかった「true」にして、ゴールしたことにするよ。
スクリプトを保存
Visual Studioの場合→【ファイル】→【すべて保存か〇〇の保存】(WindowsでCTRL + Sでも可)
MonoDevelopの場合→【File】→【Save】
絶対に保存してくださいね。
おわりに
今回は動作確認してもいつもと変わりません。
スクリプトをかいた理由はいくつかあります。「goal」変数が「true」になったら、はじめの画面に戻る処理をするとか、音を鳴らす、などの処理を行えるようになるからです。
いまわからなくても後々でてくるので、お楽しみに。
では【Unity3Dサンプルゲーム】障害物ランを作ろう~11~にいきましょう。
コメント