2017-02-24 9 views
0

C#を使用してUnity 3D上でシンプルなCADアプリケーションを作成してクローゼットを構成しています。今私はいくつかのスクリプトとクラスを持っており、クローゼットをプロジェクトのすべてのスクリプトでアクセス可能なグローバルオブジェクトにする必要があります。C#でグローバルオブジェクトを作成する方法

私はクローゼットクラスをstaticとして設定しましたが、それはそのように変更できないたびに変更されています。私がC#で作業するのは初めてであり、ちょっと失礼です。

答えて

1

グローバルではなく、GameObject.Find()メソッドを使用してスクリプト内で見つけることができるGameObjectを作成することをお勧めします。

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    private GameObject cabinet; 
    void Start() { 
     //find the cabinet object in your scene 
     cabinet = GameObject.Find("Cabinet"); 
    } 
} 
+0

'public static'クラス、メソッド、または変数は、C#が 'global'と最も近いので、これを行うにはこれが唯一正しい方法です。 – CDove

+0

しかし私がそれをすれば、私はクローゼットのすべての情報を失う。私のクローゼットオブジェクトは4つのGameObjectといくつかのオブジェクトで構成されていますので、それはグローバルクローゼットオブジェクトでなければなりません – davidroman

0

私は同じ問題に直面していました。私が思いついた解決策は単純ですWorldGameObjectを作成して、すべてのオブジェクトをプロジェクトの階層で派生させます。

このコードをすべてのクラスで呼び出すことも、ルートを介して親を取得する基本クラスを作成することもできます私の悪い

using UnityEngine; 
using System.Collections; 

//Add this class to your world game object and store your globals here 
public class GlobalContext : MonoBehaviour{ 
} 

public class BaseClass : MonoBehaviour { 
    private GlobalContext world; 
    void Start() { 
     //find the cabinet object in your scene 
     world= transform.root.GetComponent<GlobalContext>(); 
    } 
} 
0

、それはいくつかのエラーを思い付いたのが、今それがうまく働いた理由が、私はstaticてみました初めて知りません。私はどこからでもこのオブジェクトにアクセスできます。

関連する問題