例えば「GameMain.cs」というスクリプトファイルがあったとして、これを他のスクリプトから参照したい場合、あると思います。
Unityでの実現方法をご紹介します。
ダメな例
GameMain gm = new GameMain();
素直にやってみる。
コンパイルエラーにもならないし一見良さそうだけど以下の警告が出ます。
You are trying to create a MonoBehaviour using the ‘new’ keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
どういった内容なのかというとこんな感じ。
「Unityで使っている『MonoBehaviour』はnewでインスタンス化するんじゃねーぞ。ヒエラルキーウィンドウでゲームオブジェクト作って、そこにスクリプトをアタッチしろ。そんでそのゲームオブジェクトを参照して使え!」
スポンサードサーチ
実現方法
Unityに怒られてしまったので言われるとおりに直してあげましょう。
まずはヒエラルキーウィンドウで「空のオブジェクトを作成」します。今回は「GameMain」という名前にしました。
作成した「GameMain」オブジェクトのインスペクターに、参照したいスクリプト「GameMain.cs」をドラッグ&ドロップしアタッチします。
最後にGameMain.csを使いたいスクリプトに以下を書けばおっけーです。
GameObject go = GameObject.Find(“GameMain”);
gm = go.GetComponent();
やってる内容は、「GameMain」オブジェクトをFindで探し出して、探し出したオブジェクトにアタッチされている「GameMain.cs」を参照しています。
これでGameMain.csに書かれているpublicな変数や関数を利用することができます。
以上!