1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クラス名とファイル名が一致しないエラーの罠

Last updated at Posted at 2020-09-03

0.はじめに

筆者はバリバリの初心者なので内部の仕組みは分からないし、この記事の内容も100%正確とは言い切れません。

1.有名なあのエラー

Unityを独学で勉強しようとGoogleを徘徊した時、多くのサイトで**「初心者がしやすいエラー」**として
クラス名とファイル名(スクリプト名)が一致していないというものが紹介されていた。実際にエラーを体験したという人もいるはず。

Consoleに表示されるのはこれ ↓

Can't add script component "ファイル名(スクリプト名)" because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.
Google翻訳:スクリプトクラスが見つからないため、スクリプトコンポーネント「ファイル名(スクリプト名)」を追加できません。 コンパイルエラーがなく、ファイル名とクラス名が一致していることを確認してください。

Inspectorに表示されるのはこれ ↓

No MonoBehaviour scripts in the file, or their names do no match the file name.
Google翻訳:ファイルにMonoBehaviourスクリプトがないか、ファイルの名前がファイル名と一致していません。

2.クラス名とファイル名が一致してるのに...

初めての2Dゲームを制作している時、例のエラーが発生したので調べてみたが原因がわからなかった。
どちらも"MoveText"という風にクラス名もファイル名(スクリプト名)も一致しているのにエラーが出ている。
(タップした場所に表示されたテキストが上昇して消える、というものを作っていた)

エラーのことを調べながらこんなことを考えたり試したりした ↓

  • 予約語を使っているかも!→名前を別のものに変える(4回変えた)

  • 名前の後や前にあるスペースがクラス名と認識されて一致しないのでは?

  • 日本語入力でアルファベットを入力したとか?

  • 中身が間違っているんじゃないか?→変数名や演算子などを書き換え

  • etc...

が、すべて関係のないものだった。
(再起動は面倒くさいからやらなかった)

3.結論

1時間苦戦してやっと目当ての記事を見つけた ↓
https://teratail.com/questions/172017

内容はなんだか難しそうでよく分からなかったけど、

既存スクリプトにバグが無いかを確認する

この1行だけ読めた。
後で確認するとこの時、「DestroyMe」というスクリプトの中で「DestroyMe(this.gameObject)」と記述していた。
(本来ならメソッド名は「Destroy」のはずがスクリプト名の「DestroyMe」にしてしまっていた)

要は、**「既存スクリプトにバグがあった」**ということになる。

4.まとめ

検索してもなかなか出てこないのでこのエラーに1時間も費やしてしまった。検索スキルが低いだけかもしれない
スクリプト名を間違えやすい名前にするだとか、エラーを放置するといったことは避けた方が良さそう。

余談だけど、1時間悩んだうちの20分はエラー本文のclassをdassと訳していたから。エラーが出ても焦らずに対処しよう!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?