web-dev-qa-db-ja.com

パラメータ変数Unityでシーンをロードする

私のゲームでは、タイルの50x50グリッドを含むマップビューがあります。タイルをクリックすると、そのタイルビューに送信され、攻撃などが行われます。コードに関する限り、これらの「タイル」間の唯一の違いは、タイルIDです。グリッド上のどの番号。その数は、残りを処理するために、initでサーバーに渡されます。

明らかに、それがタイルの唯一の違いであるため、シーン「1」、シーン「2」...シーン「2500」を作成し、SceneManager.LoadSceneを呼び出して特定のタイルビューに切り替えるのは誤りです。

DontDestroyOnLoad();を使用できます。シーンスイッチでタイルIDを保持するためにタイルをクリックしたとき1)それはint変数だけではなくゲームオブジェクトのみを受け入れます2)タイルビューでinit以外の変数を保持する必要はありません/必要ありません。ですから、うまくいくかもしれませんが、やり過ぎのようです。

基本的にパラメーターをシーンロードに渡すだけの良い方法はありますか?

9
DasBeasto

情報を保持する静的クラスを作成できます。このクラスはどのゲームオブジェクトにもアタッチされず、シーンを変更しても破棄されません。これはstaticであり、1つしか存在できないことを意味します。あなたできませんStaticClassName scn = new StaticClassName()を記述して、新しい静的クラスを作成します。たとえば、StaticClassName.SomeStaticMethod()から直接アクセスし、どこからでもにアクセスできます。変数に値を格納し、シーンを変更して、そのシーンで使用する方法については、次の例を参照してください。

シーン「テスト」でゲームオブジェクトに接続された通常のUnityスクリプト:

_using UnityEngine;
UnityEngine.SceneManagement;
public class TestingScript : MonoBehaviour {
    void Start()
    {
        StaticClass.CrossSceneInformation = "Hello Scene2!";
        SceneManager.LoadScene("Test2");
    }
}
_

情報を保持する新しい静的クラス(monobehaviourから継承しない):

_public static class StaticClass {
    public static string CrossSceneInformation { get; set; }
}
_

シーン「Test2」のゲームオブジェクトにアタッチされたスクリプト:

_using UnityEngine;
public class TestingScript2: MonoBehaviour {

    void Start () {
        Debug.Log(StaticClass.CrossSceneInformation);
    }
}
_

クラス全体を静的にする必要はありません(何らかの理由でクラスのインスタンスをさらに作成する必要がある場合)。 (変数ではなく)クラスからstaticを削除する場合でも、_StaticClass.CrossSceneInformation_を介して静的変数にアクセスできますが、StaticClass sc = new StaticClass();を使用することもできます。このscを使用すると、クラスの非静的メンバーを使用できますが、_static CrossSceneInformation_は使用できません(静的であるため)。

16
Fredrik Schön

マーケップ!完璧で簡単なコード!

しかし、シーンをロードする方法が機能していません。

別の方法を使用できます。

UnityEngine.SceneManagement.SceneManager.LoadScene("Vuforia-4-Spheric");
0
azatserzhan