#他のスクリプトの関数ってどうやって呼び出すんだっけ?
何回かゲームを作っていても、どうしても忘れてしまうので自分の健忘録を兼ねて記事にまとめます。
##他のスクリプトをアタッチする方法
Demoscript.cs上の関数Hogehogeを、Demomanager.cs上の関数DemomanagerHogehogeで呼び出す方法を記載します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demoscript : MonoBehaviour
{
public void Hogehoge()
{
Debug.Log("Hogeoge");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demomanager : MonoBehaviour
{
public Demoscript demoscript;
public void DemomanagerHogehoge()
{
demoscript.Hogehoge();
}
}
それぞれをヒエラルキー上の空のオブジェクトにアタッチし、Demomanagerオブジェクト内のDemomanager(Script)コンポーネント内にあるDemoscriptに、Demoscript.csをアタッチしたDemoscriptオブジェクトを入れます。
これで、関数の呼び出しが可能になります。
##シングルトンを利用する方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demoscript : MonoBehaviour
{
public static Demoscript instance;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
public void Hogehoge()
{
Debug.Log("Hogeoge");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demomanager : MonoBehaviour
{
public void DemomanagerHogehoge()
{
Demoscript.instance.Hogehoge();
}
}
それぞれのスクリプを空のオブジェクトにアタッチすることで関数の呼び出しが可能です。
個人的には、シングルトンを利用する方法が汎用性が高く好きです。
##シングルトン利用時の注意点
シングルトンで呼び出される関数はシーンの移動時に壊されてしまうので、そのまま関数をボタンなどに貼り付けると、シーンの移動時にミッシングになってしまいます。
そのためにも、シーン毎に独立したスクリプトを作成し、そこからシングルトンで生成されたスクリプトの関数を呼び出すように癖をつけると良いと思います。