何してきたかのメモ🍣🍣

エンジニアです、最近はPHPやってます。 ジャンル不問の備忘録です。 気になったことをメモ的に書いてます。

【Unity】スクリプトがGameObjectに適用できない時の解決策【初心者向け】

どうもこんにちは、n清(@n_nkiyo)です!

 

今回は、Unityを扱っていく上で初心者が必ずと言っていいほど、(というかある程度慣れてきても・・・)

 

Unity,unity,ユニティ,ユニティー,うにty,初心者,基本,基礎,わかりやすい,簡単,分かりやすい,優しい,易しい,時計,アナログ,アナログ時計,とけい,針,土台,画像,ブログ,1,2,3,4,5,1,2,3,4,5,作る,もの,ポートフォリオ,ポート,かんたん,きほん,初めて,はじめて,公式,外見,3D,2D,ソース,プログラム,プログラマ,C#,C,Java,JavaScript,じゃば,ジャバ,ジャバスクリプト,言語,げんご,エラー,バグ,入らない,はいらない,Can,add,Add,あっd,ゲームオブジェクト,オブジェクト

ぶつかるであろう問題「スクリプトがGameObjectに適用できない!」の僕なりの解決策を備忘録的に書いていこうかなと思います。

 

では早速解決策ですが、大きく分けて二つです。

 

まずは一つ目、正直初心者がやらかしちゃうミスの8割くらいはこれだと思ってます(あくまで自分の経験上ですが…)

それが何かというと、「ファイル名とクラス名が違う問題」です。

 

具体的には、

 Can't add script

Can't ass component 'Player' becsuse it doesn't exist.

Check to see if the name and class name match.

 といったエラー文が出ている状態だと思います。

この場合は簡単で、自分がつけたファイル名と、ソースコード内のクラス名(大体はMonoBehaviourの前部分)の名前があっているかを確認してあげてください。

実際のソースコードを例に挙げると。

 

ファイル名:riset;

using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine;

public class riset : MonoBehaviour {
    private void OnCollisionEnter(Collision hit)
    {
        int sceneIndex = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(sceneIndex);
    }
}

 

ファイル名:ristart;

using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine;

public class riset : MonoBehaviour {
    private void OnCollisionEnter(Collision hit)
    {
        int sceneIndex = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(sceneIndex);
    }
}

 

上が、大丈夫なパターン、下がダメなパターンです。

ソースの中身は適当に持ってきたものなので気にしないでくださいw

 

これでも治らないって方は、今のプロジェクト内に入っている別のソースコード(GameObjectに突っ込んだやつとは別の)の中にエラーが出ていないか確かめてみてください。

これは僕自身あったことなのですが、全く関係ない場所で出てたエラーを直したら今の場所のスクリプトが入れれた、なんてことがありました。

 

以上が、スクリプトがGameObjectに適用できない時の解決策になります。

もし、これでも治らなかったよーって方いらっしゃいましたら、コメント等してくださるとわかる範囲でお手伝いします!

 

では、n清(@n_nkiyo)でした!!