質問: Unity初心者です。 Unity上でstatic変数を複数のオブジェクトで使用した場合の挙動についてわからなかったため、教えてください。 ``` public class MyClass : Monobehaviour{ private static MyClass myClass; private void Greeting(){ Debug.Log("Hello"); } } ``` というプログラムがあり、幾つかのオブジェクトにアタッチされている場合、 1. myClassはすべてのオブジェクト間で共通の変数となっているのでしょうか 2. Greetingはどれかのオブジェクト内で呼び出されたとき、すべてのオブジェクトで実行されるのか 以上の2点がどうなのかわかりません。 自分で実行してみましたが、1番は共通になっているようでした。 2番は、上と同じであれば共通になっているため、すべてのオブジェクトで実行されると思っていたのですが、そうではありませんでした。 しかし、確信が持てなかったため、質問させていただきました。 Unityに詳しい方、ご回答をよろしくお願いします。
回答: > > 1. myClassはすべてのオブジェクト間で共通の変数となっているのでしょうか > > > はい、共通の変数となっています。 今回の場合、`myClass`という変数は共通で、`myClass`の実体は1つのみとなっていますが、MyClassのインスタンス自体は複数生成することが可能です。 例えばMyClassコンポーネントを複数のGameObjectにアタッチした場合、アタッチした数だけMyClassのインスタンスは生成されます。 しかし、どれだけ多くのインスタンスが生成されたとしても、`myClass`の変数に設定できるのは1つのインスタンスのみとなります。 > > 2. Greetingはどれかのオブジェクト内で呼び出されたとき、すべてのオブジェクトで実行されるのか > > > いいえ、全てのオブジェクトでは実行されません。呼び出されたオブジェクトに対してのみ実行されます。 全てのオブジェクトは変数を共有しているのみであり、メソッド呼び出しの伝搬などは発生しません。 全てのオブジェクトから`myClass`にアクセス可能なだけです。