C#を使用してUnity 3D上でシンプルなCADアプリケーションを作成してクローゼットを構成しています。今私はいくつかのスクリプトとクラスを持っており、クローゼットをプロジェクトのすべてのスクリプトでアクセス可能なグローバルオブジェクトにする必要があります。C#でグローバルオブジェクトを作成する方法
私はクローゼットクラスをstatic
として設定しましたが、それはそのように変更できないたびに変更されています。私がC#で作業するのは初めてであり、ちょっと失礼です。
C#を使用してUnity 3D上でシンプルなCADアプリケーションを作成してクローゼットを構成しています。今私はいくつかのスクリプトとクラスを持っており、クローゼットをプロジェクトのすべてのスクリプトでアクセス可能なグローバルオブジェクトにする必要があります。C#でグローバルオブジェクトを作成する方法
私はクローゼットクラスをstatic
として設定しましたが、それはそのように変更できないたびに変更されています。私がC#で作業するのは初めてであり、ちょっと失礼です。
グローバルではなく、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");
}
}
私は同じ問題に直面していました。私が思いついた解決策は単純です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>();
}
}
、それはいくつかのエラーを思い付いたのが、今それがうまく働いた理由が、私はstatic
てみました初めて知りません。私はどこからでもこのオブジェクトにアクセスできます。
'public static'クラス、メソッド、または変数は、C#が 'global'と最も近いので、これを行うにはこれが唯一正しい方法です。 – CDove
しかし私がそれをすれば、私はクローゼットのすべての情報を失う。私のクローゼットオブジェクトは4つのGameObjectといくつかのオブジェクトで構成されていますので、それはグローバルクローゼットオブジェクトでなければなりません – davidroman