【Unity3Dサンプルゲーム】障害物ランを作ろう~9~【チュートリアル】

障害物ランを作ろう~8~の続きです。

今回はステージ外に落ちてしまったら、最初の場所に戻る処理を行います。C#でスクリプトを書いていきます。この記事では初プログラミングです。

目次

前提条件

前回のライトを設置するところまで行っておいてください。

今回の流れ

  • ステージ外に落ちるとはどういうことか確認
  • Cubeを作成
  • 名前を【OutStage】に変更
  • 【OutStage】の位置、大きさを変更
  • 【Mesh Renderer】を無効化する
  • 【Is trigger】をチェックする
  • 【OutStage】にスクリプトの追加,アタッチする
  • 【Out】スクリプトを開く
  • スクリプトを書く
  • 実際にスクリプトを書いていく
  • 動作確認
  • 明るさが変わる場合
  • 【Stage】オブジェクトの中に【OutStage】を入れて整理する

ステージ外に落ちるとはどういうことか確認

障害物ゲームでステージ外に落ちる

現在のゲームを行うと、一度ステージから落ちてしまうと永遠に落ちたままです。

そこでステージ外に落ちると、もう一度このSceneを読み込んで、最初からスタートするという形にしていきます。

ステージ外に落ちると判断するところは、どうしましょうか。今回はステージ下に大きなCubeを設置して、それに当たるともう一度Sceneを読み込む(リスタートする)形にします。

触れたたリスターする

Cubeを作成

Cube作成方法

●Cube作成方法

【Hierarchy】→【Create】→【3D Object】→【Cube】

名前を【OutStage】に変更

●Cubeの名前変更

【Cube】→【右クリック】→【Rename】→【OutStage】

名前の変更の仕方がわからない方は戻るか、【unity】物体(ゲームオブジェクト)の名前変更をわかりやすく説明をご覧ください。

【OutStage】の位置、大きさを変更

OutStageの位置、大きさを変更

●【OutStage】の位置、大きさを調節

【OutStageを選択】→【Inspector】→【Transform】→【上記のように数値を変更】

位置大きさの変更の仕方がわからない方は戻るかゲームオブジェクトの位置・角度・大きさを変更する【Transform】の使い方をご覧ください。

outstageをSceneビューで見た図

こんな感じにいままで作ってきたステージの下に、大きな直方体ができていれば成功です。

【Mesh Renderer】を無効化する

Mesh-Rendererを非表示にする

●【Mesh Renderer】を無効化する

【OutStage】→【Inspector】→【Mesh Renderer】→【左上のチェックを外す】

先ほど作った【OutStage】を見えない形にしましょう。ゲームしているときに見える必要がありませんからね。

見えると気が散りますし。見えない形=透明にします。

【Is trigger】をチェックする

istriggerにチェックする

●【Is triggerにチェックする】

【OutStage】→【Inspector】→【Box Collider】→【Is triggerにチェックする】

なぜ【Is trigger】をチェックするのか?

【Is trigger】をチェックすることで、当たり判定機能を機能をONにしてくれます。当たり判定をONにすることで

【OutStage】にあたったら〇〇する

ということをスクリプト(プログラミング)で操作できるようになります。

【OutStage】にスクリプトの追加,アタッチする

Out-scriptを記述

●【OutStage】にスクリプトの追加,アタッチする

【OutStage】→【Inspector】→【Add Component】→【New script】→【Outを入力】→【Create and Add】

アタッチというのは、【OutStage】にスクリプトを繋げることです。

【New script】が見つからない方は、上の検索欄にscriptと入力すればでます。

もし名前を入力するところの下にLanguageという欄があったら、【C sharp】を選択してください。

【Out】スクリプトを開く

Outをダブルクリックする

●【Out】スクリプトを開く

【Projectウィンドウ】→【Assets】→【Outをダブルクリック】→【Visual StudioかMonoDevelopが開く】

Visual StudioかMonoDevelopどっちが開いても同じスクリプトを入力してください。自分はVisual Studioです。

スクリプトを書く

注意点

いきなりですが、注意点です。

  • スクリプト全ての意味がわからなくてもいいので書く
  • 自分はVisual Studioの画面であるがMonoDevelopでも可能。同じコードを入力してください。
  • コピペより自分で書いてほしいです

これらは守っていただきたいです。スクリプトの意味が、わからなくても進めてください。

実際にスクリプトを書いていく

以下のコードを書いていきます。コードが小さくてごめんなさい。お使いのブラウザで拡大してご覧ください。検索すれば出ると思われます。

あと、最後の「}」を忘れないでください。「//」はコメントなので、実行されません。

Out

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.ライブラリ読み込み

Out

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.当たり判定設定

Out

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.当たり判定でどんな処理を行うのか

Out

            // 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】を入れて整理する

Hierarchy上を整理する

●オブジェクト整理

【OutStageを選択】→【Stageにドラッグ&ドロップ】

【OutStage】オブジェクトを【Stage】の中にいれて、Hierarchy上を整理してしまいましょう。

おわりに

ライトの設置はできましたか。次は今後のための伏線を設置します。

あわせて読みたい
【Unity3Dサンプルゲーム】障害物ランを作ろう~10~【チュートリアル】 障害物ランを作ろう~9~の続きです。 ゴールの判定エリアを作ります。伏線になるので、この記事の内容がよくわからなくても大丈夫です。 【前提条件】 【Unity3Dサンプ...
Unity3Dサンプルゲーム【障害物ラン】9記事目

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次