回答:
Tetradの答えを拡張するには、次のようなスクリプトを検討してください。
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
その後、シーンのルートに「GameSystem」というオブジェクトを作成できます。それが持つ唯一のコンポーネントは、組み込みの変換コンポーネントです(その位置を原点に、回転をアイデンティティに、スケールを1に設定します。それは重要ではありませんが、良い習慣です)。GameSystemコンポーネントをそのオブジェクトにアタッチしました。
GameSystem.Instance.blah()を使用するだけで、グローバルオブジェクトにアクセスできるようになりました。そのイベントハンドラメソッドは、MonoBehaviorから派生し、コンポーネントとして存在するため、Unityによって自動的に呼び出されます。他のゲームオブジェクトまたはコンポーネントを参照するフィールドを追加して、Unityオブジェクト階層ビューでそれらを接続できます。
はい、これは少し「奇妙」です。常に単なるグローバルシングルトンであるオブジェクト(変換も含む)を作成する必要があるのは、少し汚い感じがすることがあります。ただし、更新メッセージを取得し、デフォルトのUnityプロパティエディターで操作可能なグローバルオブジェクトを作成するためにUnityが必要とするものです。