プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【Unity】変数を別のシーンでも使いたい

もうそんな記事あるって?
うるせぇ!書かせろ!


構成


No.1 跨って使う変数を持ったスクリプトを用意
No.2 先ほどのスクリプトを持つオブジェクト
No.3 実行して確認するだけ







  No.1 跨って使う変数を持つスクリプトを用意


 いい方法はいくつかありそうですが、楽をします。
またがって使う変数を管理するスクリプトを用意します。

f:id:yutateno:20200426135807p:plain




その中をこのような記述にする。


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

public class Manager : MonoBehaviour
{
    private static int m_difficultLevel = 0;

    private void Start()
    {
        DontDestroyOnLoad(this);
    }

    public static void SetDifficultLevel(int t_diffiLevel)
    {
        m_difficultLevel = t_diffiLevel;
    }

    public static int GetDifficultLevel()
    {
        return m_difficultLevel;
    }
}

今回は「m_difficultLevel」を跨って使いたい変数とする。

Startにある「DontDestroyOnLoad(this);」というのはこのスクリプトを持つオブジェクトは今後シーンをまたいでも削除されないように命令するものです。
では、消したいときどうすればいいかといえば「Destroy(this);」を呼べばいいだけ。気を付けたいのは、オブジェクトが存在していたらを確認してから消すことです。

ちなみに調べてみたらDontDestroyOnLoadを呼ぶたびに増えてく人とかいるみたいなので呼び出すタイミングは一回だけかDestroyのあとに呼ぶかどうかすればいいと思います。試したくない!





  No.2 先ほどのスクリプトを持つオブジェクト


 これは単純に「Create Empty」で生成したものに持たせるだけの簡単なものでいいと思います。
なぜなら、消さない限りずっと存在し続けるのでね。

f:id:yutateno:20200426135826p:plain








  No.3 実行して確認するだけ


 あとは実行して確認するだけ。

youtu.be