見出し画像

シーン遷移はもう余裕!!【ゲーム制作記2】

はじめに

今回は、シーン遷移のスクリプトを書くのが大分慣れてきたので、一旦記事にまとめて復習していきます。
この記事を読んでくださっている人で知識がある方がいましたら、変な方向に進み始めているぞ〜?と思った際にはご指摘いただきたいです……笑

動作環境は

  • macOS

  • Unity 2021.3.0f1

です。
よろしくお願いします!


やりたいこと

①ボタンを押したらシーン遷移する
Invokeを使って、数秒経ってからシーン遷移する

①ボタンを押したらシーン遷移する

シーン遷移のためのスクリプトを書く前に、下準備としてBuild Settingsの編集を行います。

  1. メニューバーからFile>Build Settingsを開く

  2. 上部のScenes In Buildにシーンをドラックアンドドロップして追加する

これでOK!
この作業をやっていないとシーン遷移できないので、私は忘れないようにシーンを作ったら一旦この作業をする!と心がけてやっています笑

では、スクリプトです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; //これ必須です

public class Scene: MonoBehaviour {
    
    [SerializeField] private string loadScene;

    public void scene()
    {
        SceneManager.LoadScene(loadScene);
    }

}

これをButtonに紐付けて、Buttonを押したらscene()を呼び出すようにしています。
読み込みたいシーンはInspectorから編集できるようにしていて、使い回しも可能です!

もし使い回しする必要がない!という場合は、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Scene: MonoBehaviour {

    public void scene()
    {
        SceneManager.LoadScene("読み込みたいシーン名");
    }

このように書けば大丈夫だと思います!

②Invokeを使って、数秒経ってからシーン遷移する

①ではボタンを押したらscene()が直接処理されるようにしていましたが、前にワンクッション挟みます。
主に私はシーン遷移の時にフェードアウトの演出が入れたい!となったらこの書き方をします。(アニメーションで制御しているため)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Scene: MonoBehaviour {

    [SerializeField] private string loadScene;

    public void timeLag()
    {
        Invoke("scene", 2);
    }

    public void scene()
    {
        SceneManager.LoadScene(loadScene);
    }

Invokeについてはまだ勉強中なので、これからまたいろいろ調べて知識をつけていこうと思います。


わかっているのは、

Invoke("メソッド名" , 秒数);

で、◯秒後(整数のみ)にメソッドを実行することができる。とだけ。
日々精進です。

最後に

慣れると、コードの見やすさや使い回しにも気を配れるようになるのがいいですね!
他の処理にもわかりやすくコードが書けるように何回も反復して書いて、習得していこうと思います。

最後まで見ていただき、ありがとうございました!

この記事が気に入ったらサポートをしてみませんか?