2017-11-15 1 views
1

注:私は長年の開発経験がありますが、私はUnityの初心者です。Unity3Dインスタンス/シングルトンを管理する方法

ゲームオブジェクトをシーン全体で管理するためのベストプラクティスは何ですか?

あなたが知っているように、各シーンには実際のインスタンスを含む階層ツリーがあります。一度しかインスタンス化しないScoreManagerゲームオブジェクトがありますが、シングルトンパターンを避けたいとします。 (それは悪い習慣であるので)。 ScoreManagerにLevelsManagerなどのインスタンスが必要であるとしましょう。

私がよく知っている解決策は依存性注入ですが、それを使用するチュートリアルは見つかりませんでした。すべてのチュートリアルは階層ツリーでGameObjectsをインスタンス化し、他のGameObjectsを公的なプロパティを使ってリンクしています...依存関係注入を行う方法として数えることができます...

あなたはあなたが使用し愛している良い練習をしていますか?

ありがとうございます!

編集:

@Shogunivarはそれで問題はあなたがWelcomeSceneたとえばのために、最初のシーンの階層に一つだけのゲームオブジェクトを置く必要があり、それがあったすべての将来のシーンに固執することで、DontDestroyOnLoadを提案しましたロードされる。あなたが最初にこのゲームオブジェクトを持っているWelcomeSceneをロードする必要があり、

それに伴う問題は、あなたが存在するために、このゲームオブジェクトを必要とLevel01Sceneに言う(プレスプレイ)をテストするかもしれないということですが、それはありません世俗主義。この重複を解決するために...それが複製されるようにします、そして破壊することはありませんLevel01Sceneにも

を同じゲームオブジェクトを置く

、唯一の解決策は、(私の知る限り)シングルトンを使用することです。それは「世界の終わり」ではありませんが、これがこの質問の目的です。この問題を処理するその他のベストプラクティス(Unity)

+1

チェックアウト[DontDestroyOnLoad](https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html)それはあなたが別のシーンを通じてゲームオブジェクト上を通過することができます。 – Shogunivar

+0

DontDestroyOnLoadは現在編集したシーンをテストしてから私を防ぎ... – gilamran

+0

は、あなたはそれがテストからあなたを防止する方法について詳しく説明することはできますか? – Shogunivar

答えて

2

Zenjectは本当に強力です。彼らのGithubのページには、多くのことを説明する素晴らしいドキュメンテーションがいくつかあります。これは、グローバルバインディングを管理するための優れた方法です。

あなたがはるかに簡単に何かをしたい場合は、あなたはシングルトンクラスから継承することができます。ほとんどの人がそれに対して助言しますが、うまくいきますし、簡単です。

public class SingletonController : MonoBehaviour { 
public static SingletonController Instance; 

private void Awake() { 
    if (Instance != null) { 
    Destroy(gameObject); 
    } else { 
    Instance = this; 
    } 
} 
} 
関連する問題