障害物ランを作ろう~8~の続きです。
今回はステージ外に落ちてしまったら、最初の場所に戻る処理を行います。C#でスクリプトを書いていきます。この記事では初プログラミングです。
前提条件
前回のライトを設置するところまで行っておいてください。
今回の流れ
- ステージ外に落ちるとはどういうことか確認
- Cubeを作成
- 名前を【OutStage】に変更
- 【OutStage】の位置、大きさを変更
- 【Mesh Renderer】を無効化する
- 【Is trigger】をチェックする
- 【OutStage】にスクリプトの追加,アタッチする
- 【Out】スクリプトを開く
- スクリプトを書く
- 実際にスクリプトを書いていく
- 動作確認
- 明るさが変わる場合
- 【Stage】オブジェクトの中に【OutStage】を入れて整理する
ステージ外に落ちるとはどういうことか確認
現在のゲームを行うと、一度ステージから落ちてしまうと永遠に落ちたままです。
そこでステージ外に落ちると、もう一度このSceneを読み込んで、最初からスタートするという形にしていきます。
ステージ外に落ちると判断するところは、どうしましょうか。今回はステージ下に大きなCubeを設置して、それに当たるともう一度Sceneを読み込む(リスタートする)形にします。
Cubeを作成
●Cube作成方法
【Hierarchy】→【Create】→【3D Object】→【Cube】
名前を【OutStage】に変更
●Cubeの名前変更
【Cube】→【右クリック】→【Rename】→【OutStage】
名前の変更の仕方がわからない方は戻るか、【unity】物体(ゲームオブジェクト)の名前変更をわかりやすく説明をご覧ください。
【OutStage】の位置、大きさを変更
●【OutStage】の位置、大きさを調節
【OutStageを選択】→【Inspector】→【Transform】→【上記のように数値を変更】
位置大きさの変更の仕方がわからない方は戻るかゲームオブジェクトの位置・角度・大きさを変更する【Transform】の使い方をご覧ください。
こんな感じにいままで作ってきたステージの下に、大きな直方体ができていれば成功です。
【Mesh Renderer】を無効化する
●【Mesh Renderer】を無効化する
【OutStage】→【Inspector】→【Mesh Renderer】→【左上のチェックを外す】
先ほど作った【OutStage】を見えない形にしましょう。ゲームしているときに見える必要がありませんからね。
見えると気が散りますし。見えない形=透明にします。
【Is trigger】をチェックする
●【Is triggerにチェックする】
【OutStage】→【Inspector】→【Box Collider】→【Is triggerにチェックする】
なぜ【Is trigger】をチェックするのか?
【Is trigger】をチェックすることで、当たり判定機能を機能をONにしてくれます。当たり判定をONにすることで
【OutStage】にあたったら〇〇する
ということをスクリプト(プログラミング)で操作できるようになります。
【OutStage】にスクリプトの追加,アタッチする
●【OutStage】にスクリプトの追加,アタッチする
【OutStage】→【Inspector】→【Add Component】→【New script】→【Outを入力】→【Create and Add】
アタッチというのは、【OutStage】にスクリプトを繋げることです。
【New script】が見つからない方は、上の検索欄にscriptと入力すればでます。
もし名前を入力するところの下にLanguageという欄があったら、【C sharp】を選択してください。
【Out】スクリプトを開く
●【Out】スクリプトを開く
【Projectウィンドウ】→【Assets】→【Outをダブルクリック】→【Visual StudioかMonoDevelopが開く】
Visual StudioかMonoDevelopどっちが開いても同じスクリプトを入力してください。自分はVisual Studioです。
スクリプトを書く
注意点
いきなりですが、注意点です。
- スクリプト全ての意味がわからなくてもいいので書く
- 自分はVisual Studioの画面であるがMonoDevelopでも可能。同じコードを入力してください。
- コピペより自分で書いてほしいです
これらは守っていただきたいです。スクリプトの意味が、わからなくても進めてください。
実際にスクリプトを書いていく
以下のコードを書いていきます。コードが小さくてごめんなさい。お使いのブラウザで拡大してご覧ください。検索すれば出ると思われます。
あと、最後の「}」を忘れないでください。「//」はコメントなので、実行されません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 1.UnityでScene関係の操作を使うときに利用。
using UnityEngine.SceneManagement;
public class Out : MonoBehaviour
{
// 2.誰かが自分(OutStage)に接触した場合
private void OnTriggerEnter(Collider col)
{
// 3.Playerという名前のタグと接触した場合
if (col.gameObject.tag == "Player")
{
// 4.今のSceneをもう一度読み込む
SceneManager.LoadScene(
SceneManager.GetActiveScene().name);
}
}
}
スクリプトの説明
1.ライブラリ読み込み
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 1.UnityでScene関係の操作を使うときに利用。
using UnityEngine.SceneManagement;
using UnityEngine.SceneManagement; | Scene関係の操作を行うときに使うライブラリ |
---|
UnityEngine.SceneManagementというライブラリを読みこんでいます。これはScene関係の操作を行うときに使うライブラリです。
今回はステージ外に落ちたときにもう一度Sceneを読み込むので、このライブラリを使います。
2・3.当たり判定設定
public class Out : MonoBehaviour
{
// 2.誰かが自分(OutStage)に接触した場合
private void OnTriggerEnter(Collider col)
{
// 3.Playerという名前のタグと接触した場合
if (col.gameObject.tag == "Player")
{
【OnTriggerEnter】は誰かが自分(OutStage)に接触したときに実行されます。その誰かというのを「3」で説明しています。
ここでは「Player」というタグをもつオブジェクトが接触したときの処理を書いています。
前にプレイヤーに「Player」というタグを設定しましたよね。その「Player」というタグがここでも利用されています。
まとめると、誰かが自分に接触したときに実行されるよ→誰かというのは「Player」タグをもった人だよ。
4.当たり判定でどんな処理を行うのか
// 4.今のSceneをもう一度読み込む
SceneManager.LoadScene(
SceneManager.GetActiveScene().name);
}
}
SceneManager.LoadScene(A) | 「A」Sceneを読み込む |
---|---|
SceneManager.GetActiveScene().name | 現在のSceneを表す。(今回でいうMainシーン) |
【SceneManager.LoadScene(A)】で「A」のSceneを読み込むという処理を行います。
【SceneManager.GetActiveScene().name】は現在のSceneを表します。今回でいうと、Mainシーンのことを表します。
まとめると、現在のSceneを読み込むよってことです。
スクリプト全体を言葉で説明
1.Scene関係の処理を行うよ
2・3.「Player」タグがついたものが衝突してきたらなにか処理をするよ
4.現在のSceneをもう一度読み込む処置を行うよ
こんな形です。
スクリプトを保存する
Visual Studioの場合→【ファイル】→【すべて保存か〇〇の保存】(WindowsでCTRL + Sでも可)
MonoDevelopの場合→【File】→【Save】
絶対に保存してくださいね。
動作確認
こうなっていれば成功です。しかし、明るさが変わってしまいました。変わってない人はそのままでいいですが、変わってしまった人は下にいきましょう。
明るさが変わる場合
●リスタートして明るさがおかしくなってしまう場合
【Window】→【Lighting】→【Settings】→【Auto Generateのチェックを外す】→【Generate Lightingをクリック】
【Stage】オブジェクトの中に【OutStage】を入れて整理する
●オブジェクト整理
【OutStageを選択】→【Stageにドラッグ&ドロップ】
【OutStage】オブジェクトを【Stage】の中にいれて、Hierarchy上を整理してしまいましょう。
おわりに
ライトの設置はできましたか。次は今後のための伏線を設置します。
コメント