Unityを触り始めたとき、C#スクリプトを「GameManager.cs」にリネームしたのに紙アイコンのままで「あれ?歯車にならない…」と不安になったことがあります。
ネットで検索すると「GameManager=歯車アイコン」という話がちらほら出てきて混乱したのですが、実際にはこれは誤解に近いものでした。
この記事では、私が調べて確認した内容を整理しつつ、GameManagerを正しく実装する方法や注意点をまとめておきます。
GameManagerをリネームしてもアイコンは変わらない
まず前提として、UnityではC#スクリプトを「GameManager」にしたからといって自動で歯車のアイコンに変わることはありません。
通常のC#スクリプトと同じで紙のアイコンが表示されるのが正しい挙動です。
「歯車」アイコンは、MonoBehaviourとしてアタッチできないスクリプトやEditor拡張など、別の要因で変わることがあります。
そのため、歯車にならないからといって動作に問題があるわけではありません。
私自身も最初は「設定を間違えた?」と思いましたが、結論としては正常動作でした。
歯車に見えるケースがある理由
「歯車アイコン」の正体を調べてみると、いくつかの条件でそう見えることがあるようです。
- MonoBehaviourを継承していないクラス(アタッチ不可)
- クラス名とファイル名が一致していない場合
- Editorフォルダに置かれたEditorスクリプト
- 外部アセットのGameManagerと競合しているケース
これらはいずれも「名前がGameManagerだから」ではなく、スクリプトの性質や配置によるものです。
実際に試しにクラスをMonoBehaviourなしで書いたら、確かにアタッチできず歯車っぽい見た目になりました。
逆に正しく継承していれば紙アイコンでもきちんとアタッチできます。
GameManagerを正しく実装する基本チェック
「アイコン」よりも大事なのは、スクリプトが正常に動くかどうかです。
最低限確認した方がいいポイントをまとめます。
- ファイル名とクラス名が完全一致しているか(GameManager.cs / public class GameManager)
- MonoBehaviourを継承しているか
- クラスがabstractやgenericになっていないか
- Assets/Editor 以下に置いていないか
- Consoleにエラーが出ていないか
これらをクリアしていれば、紙アイコンでも安心して使えます。
最小のGameManagerサンプルコード
実際に私が新規プロジェクトで試した最小構成です。
紙アイコンのままですが、きちんとアタッチして動作しました。
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }
public bool IsGameRunning { get; private set; }
void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
void Start()
{
IsGameRunning = true;
Debug.Log("[GameManager] Started.");
}
public void StopGame()
{
IsGameRunning = false;
Debug.Log("[GameManager] Stopped.");
}
}
空のGameObjectを作ってアタッチするだけで動作確認できます。
Consoleにログが出ればOKです。
新規プロジェクトでの再現テスト
「歯車にならないのは自分の環境だけ?」と疑ったので、念のため別のUnityプロジェクトを作って検証しました。
結果はやはり同じで、紙アイコンのまま問題なくアタッチできました。
もし歯車アイコンが出るとしたら、それはプロジェクトに入っているアセットやEditor拡張の影響だと思います。
Libraryを削除して再生成すると直る場合もあります。
実際に困るケースと回避策
本当に気を付けたいのは、GameManagerを複数のアセットが持っていて競合するケースです。
特にPhotonや外部フレームワークを導入すると、同名のスクリプトがプロジェクト内に存在し、意図せず挙動が変わることがあります。
その場合は
- 自作のクラスに名前空間を付ける(例: MyCompany.Project.GameManager)
- 名称をGameDirectorやAppManagerに変更する
といった方法で衝突を避けるのが無難でした。
私も最初は気にせずGameManagerを多用していましたが、後で外部アセットとぶつかって痛い目を見たので、今は名前空間で分けるようにしています。
まとめ
「GameManagerにすると歯車になる」というのは半分都市伝説のようなもので、実際には紙アイコンが正常です。
歯車にならないことを気にする必要はありません。
大事なのは以下の点です。
- ファイル名とクラス名を一致させる
- MonoBehaviourを正しく継承する
- エラーが出ていないかConsoleを確認する
- 必要なら名前空間や別名で競合を回避する
このあたりを押さえておけば、GameManagerは見た目に関係なく普通に動きます。
もし同じように悩んでいる方がいたら、歯車アイコンを探すのではなく挙動に注目して確認してみると安心できるはずです。
実装方法や設計パターンを学びたい方は、Unity入門の森ショップの講座も参考になります。