今回は気づいたら単純な Unityのエラーなのですが、以下のエラーの解決法を解説します。

「error CS0117: ‘SceneManager’ does not contain a definition for ‘LoadScene’」

Unity_Error_71

【現象】

以下のプログラム内にて、シーンの呼出しを行う「LoadScene」のところでエラーが出ています。
Unity_Error_72

これを Unityエディタに取り込むと、最初に示しましたが、以下のようなエラーが出てきます。

「error CS0117: ‘SceneManager’ does not contain a definition for ‘LoadScene’」
Unity_Error_71

エラー文を見ると、「LoadScene関数の定義が SceneManagerに登録されていない」と言っています。
最初に「using UnityEngine.SceneManagement;」も記入しているので、SceneManagerにはエラーが出ていませんが、LoadScene関数が呼び出せないとはどう言うことでしょう。。。



【解決法】

これの原因は、自分で作成したクラス名に「SceneManager」と言う名前を付けてしまったことにあります。

要は、SceneManagementのクラス SceneManagerと自分のクラス名がかぶっているので、その自分の SceneManagerに LoadScene関数が定義されていないと怒られてしまっています。
Unity_Error_72


と言うことは、解決法は2つ場合があることになります。


クラス名をそのまま使用する場合

クラス名をそのまま使用したい場合は、しかたないので、LoadSceneがどのクラスの関数かを明記する必要があります。
以下のように、「UnityEngine.SceneManagement.SceneManager.LoadScene」としましょう。
Unity_Error_73

public class SceneManager : MonoBehaviour
{
    public void Open_GameScene()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("GameMain");
    }
}


クラス名を変えても良い場合

単純に自分のクラス名を変更すれば解決です。例えば、以下のように。
Unity_Error_74

public class SceneController : MonoBehaviour
{
    public void Open_GameScene()
    {
        SceneManager.LoadScene("GameMain");
    }
}


今回のエラーは、気づけば単純ですが、Sceneを変更制御するだけのクラスを「SceneManager」と言う名前を付けたくなってしまいますよね。
お気を付けください。



Sponsored Link