2017-02-22 1 views
2

私のゲームでは、タイルの50x50グリッドを含むマップビューがあります。あなたがタイルをクリックすると、そのタイルビューに送られ、物事を攻撃します。これらの「タイル」の唯一の違いは、コードが関わる限り、タイルIDです。グリッド上のどの番号。この番号は、残りの部分を処理するためにinit上のサーバに渡されます。パラメータを可変にしてシーンをロードするUnity

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

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

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

+1

私はあなたがそれがgameobjects(monobhaviourを継承する)と話す必要がない場合、情報を保持する静的なクラスを作ることができると思います。 1秒、私はあなたにすばやい例を与えます。 – Maakep

答えて

3

あなたの情報を保持する静的なクラスを作ることができます。このクラスはGameObjectには付加されず、シーンを変更するときには破壊されません。それはstaticであることを意味します。あなたはできませんStaticClassName scn = new StaticClassName()新しい静的クラスを作成する書き込みできません。たとえば、StaticClassName.SomeStaticMethod()に直接アクセスし、からにアクセスできます。

シーン「テスト」でゲームオブジェクトに添付通常のユニティスクリプト:

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

新しいの変数、変更シーンに値を格納し、そのシーンでそれを使用する方法についてこの例を参照してください。

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

シーン "Test2を" におけるゲームオブジェクトに添付のスクリプト:

using UnityEngine; 
public class TestingScript2: MonoBehaviour { 

    void Start() { 
     Debug.Log(StaticClass.CrossSceneInformation); 
    } 
} 
情報を保持している静的クラス(monobehaviourから継承しません)

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

+1

私は通常、いくつかのコンテキスト情報を必要とするシーンごとに1つのクラスを作成します – Dunno

+1

私はこれがたくさん好きです!ちょうど私が必要としたもの。そして、あなたは静的なものを私が幾分恣意的に使っていることを思い出させるためのものです。 – DasBeasto

+0

素晴らしい!助けてうれしい! – Maakep

関連する問題