Unityよくあるエラー〜"All compiler errors have to be fixed before you can enter playmode!"と “Please fix any compile errors and assign a valid script."〜
はじめに
私が苛まれたエラーランキングNo.1です.
そしてUnityへの数少ない苛立ちの一つです.
よくあるエラー
=
All compiler errors have to be fixed before you can enter playmode!:
意訳)プレイモード実行前に,全てのコンパイラエラーを修正する必要があります!
Please fix any compile errors and assign a valid script.:
=
実行時に出ます.このエラー見たときは「なんでじゃい」となるわけです.
原因:ネット上からスクリプトをコピペしたりする時によく発生します.
問題は超シンプル,多くの場合,スクリプトの名前が間違っているんです.要確認です.
コピペした時に変数名やらファイル名がミスっているなんていうときは,スペルミス,まあ不注意かなって思うわけですが…
Unityの苛立ちポイント
ここで本題の苛立ちポイント.
大文字小文字表示が「ある部分で理不尽」なんです.
コンポーネント名としての大文字小文字の差異
.csファイルなんかは,きっと皆さんローマ字で書きますが,大文字小文字のルールは人それぞれだと思います.
仮に,.csファイルの最初の一文字を小文字にしたとします.すると,混乱が起きます.
Obj_rotate.csは一文字目は大文字ですが,obj_rotate2.csは小文字です.しかし,コンポーネント名としてはどちらも大文字です.obj_rotate2.csのファイル名は小文字なのに…
これでは,普通にファイル名指定をミスるケースが出ます.
public変数として用意した”Temp”も,スクリプト中では”temp”で宣言しているんです.でも図中では,強制で大文字になってしまいます.
じゃあ大文字にしとくか,といって.csのスクリプトを下記のようにしたとします.
obj_rotate2.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Obj_rotate2 : MonoBehaviour {
public int temp;
private int temp2;
void Update () {
this.transform.Rotate (5, 0, 0);
}
}
スクリプトの中身は言いたいことと関係ないので気にしないでください.
仮にclass宣言部の
public class obj_rotate2 : MonoBehaviour {
を
public class Obj_rotate2 : MonoBehaviour {
と大文字にしようものなら
Please fix any compile errors and assign a valid script.
です.
結果
普通に混乱します.いや,混乱しました.
じゃあどうするの.答えは
「.csなどファイル名は大文字始まりにする」というくらいです.
まあこれくらいなら良いか,って思います.対策対策.
ですが,先程も言いましたが,変数名もコンポーネントとしての表示上は,大文字始まりなのです.
変数名まで一文字目を大文字にするのはなんだか違和感があります.
うーん.いい解決法無いものか.というか,コンポーネントとしての名称はいいとして,変数名の一文字目も大文字にするの勘弁してもらいたい…普通に間違える…
まとめ
All compiler errors have to be fixed before you can enter playmode!
や
Please fix any compile errors and assign a valid script.
が出たときに主に確認する場所
・ファイル名とclass宣言部の名称が合っているか確認
・大文字小文字の差異,スペルミスなど確認
プログラミング経験者ならスペルミスなんて日常茶飯事です.しょうもないミスでモチベーションを失ってはいけない.
教訓
・c#のファイル名の一文字目は大文字推奨
参考まで.