Movatterモバイル変換


[0]ホーム

URL:


Unity C#のコンパイルエラーの種類と対処法について

コンパイルエラーの解説の画像Unity C#入門講座
コンパイルエラーが発生した時はファイルパスとその中の行、列番号とエラー番号、詳細な内容が表示される。


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

前回ははじめてのUnity C#プログラミングに挑戦しましたね。

前回の記事↓

Unity C#スクリプトの構造 スクリプトの作成と実行方法
前回はUnityとC#について簡単に解説しました。前回の記事↓今回の記事ではいよいよ実際にUnity上ではじめてのプログラミングに挑戦です!Unity C#スクリプトを作成・実行していきましょう!C#スクリプトを作成してGameObject...
feynman.co.jp
2023.02.02

プログラミングではコンパイルエラーが付き物です。

コンパイルエラーはスクリプトの書き方が間違っていることを私たちに教えてくれる機能となります。コンパイルエラーが発生しても、慌てず対処法を覚えることでスムーズにプログラミングしていくことができるようになります。

この記事の最後には初心者が起こしやすいコンパイルエラーとその対処法についていくつか解説していますので、困った時はそちらを参考にしてください。


【Line登録者限定のプレゼントもあるよ!】

コンパイルエラーの種類と対処方法

今回、初めてプログラミングをした方の中には、スクリプトを書いているうちにUnity Editorのコンソール画面に何やら赤いテキストが表示されたかもしれません。

その赤いテキストがコンパイルエラーです。

C#コンパイラーが「スクリプトをビルドする時に何が書かれているのかわからない」と判断した時に表示されるものです。

簡単に言うと、あなたのプログラムの書き方にミスがあったということです。

コンパイルエラーが出た画面の画面

コンパイルエラーがあるとコンソールタブに表示される。

プログラミング初心者がつまずくポイントで多いのは、このコンパイルエラーの意味がよくわからずにそのまま挫折してしまうことです。

コンパイルエラーを取り除けないとUnityを動かすことができませんからね。

そんな憎らしいコンパイルエラー。

でも、コンパイルエラーはC#コンパイラーがスクリプトの中に書き方のミスがあったことを教えてくれるものなので、むしろ間違いを直すためのヒントを与えてくれます。

さらに、ミスした部分がスクリプトのどの行にあるのかも教えてくれるので、エラーを怖がらずに表示されたテキストを見てみましょう!

コンパイラエラーの見方

コンパイルエラーが発生した時は基本的にコンソールタブ上に出力されます。コンソールタブの開き方は上の方で説明してるので、そちらを参照してください。

以下の画像で示されているコンソールタブにはコンパイルエラー以外にもアプリ実行時のエラーやログが出力されます。
このタブが開発の手助けをしてくれます。

基本的にコンパイルエラーは次のような形式をとっています。

  • 発生したファイルとその行、列番号
  • エラー番号
  • コンパイルエラーの詳細な内容
コンパイルエラーの解説の画像

コンパイルエラーが発生した時はファイルパスとその中の行、列番号とエラー番号、詳細な内容が表示される。

使用している環境によっては、エラーテキストが英語のままになっているかもしれません。

その場合でもエラー番号と発生したファイルと行、列番号については共通しています。

そこに表示されるテキストが全て読めなくてもなんとなくコンパイルエラーの原因がわかるようになってきますので、コンパイルエラーの対処の経験をどんどん積んでいきましょう!

よくあるコンパイルエラーとその対処法

次によくあるコンパイルエラーについて解説していきます。

ただ、コンパイルエラーも膨大な数が存在しているため、その全てについて解説するのは難しいため、ここではよくあるコンパイルエラーについていくつか抜粋しています。

どうしてもわからなくなった時は初めから書き直してみるのもオススメです。

また、コンパイルエラー文章をコピペして検索してみましょう。解決法が見つかるかもしれません。

また、一つコンパイルエラーが発生した時は発生した場所以外にもコンパイルエラーが100個単位で大量に発生することがよくあります。

ですが、エラーの原因が実は一つということもよくあります。

なので、エラーを修正する時はなるべくコンソールタブの上の方にあるものから直していくとあっという間にコンパイルエラーがなくなっていくでしょう。

コンパイルエラー実例1: セミコロン忘れ

コンパイルエラー セミコロン忘れ
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
 
publicclassSample:MonoBehaviour{
    publicfloatValue=0.1f// <- 文末の';'忘れ
    publicColorColor=Color.white// <- 文末の';'忘れ
    publicMeshRendererMesh// <- 文末の';'忘れ
 
    // Start is called before the first frame update
    voidStart(){
        Mesh.material.color=Color// <- 文末の';'忘れ
    }
 
    // Update is called once per frame
    voidUpdate(){
        transform.position+=newVector3(Value,0,0)// <- 文末の';'忘れ
    }
}

上のサンプルコードを書きますと、エラー番号 CS1002のコンパイルエラーが発生します。

CS1002 セミコロン忘れの画像

‘;’を忘れた時に出るコンパイルエラー。

エラー内容は ; expectedとありますが、これは単純に;(セミコロン)を文末に付けるのを忘れていることを表しています。

画像にあるコンパイルエラーは全てこの;忘れによるもので、それぞれAssets/Sample.csの

  • 6行目
  • 7行目
  • 8行目
  • 12行目
  • 17行目

にエラーが発生していることが読み取れます。

なので、解決方法としては上にあげたエラー発生箇所に;をつけるだけの簡単なコンパイルエラーになります。

コンパイルエラー実例2: キーワードミス

コンパイルエラー キーワードミス
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
usingSystem.Collections;
usingSystem.Collections.Generic;
usingaaaUnityEngine;// <- キーワードミス
 
pubadsaxaaclassSample:MonoBehaviour{// <- キーワードミス
    publicfloatValue=0.1f;
    pubacneiColorColor=Color.white;// <- キーワードミス
    publicMeshRendererMesh;
 
    // Start is called before the first frame update
    asoivStart(){// <- キーワードミス 型名ミスと同じ感じになる
        Mesh.material.color=Color;
    }
 
    // Update is called once per frame
    voidUpdate(){
        transform.position+=newVector3(Value,0,0);
    }
}

上のサンプルコードを書きますと、色々な種類のコンパイルエラーが発生します。

コンパイルエラー キーワードミスの画像

一つのコンパイルエラーから大量のコンパイルエラーが発生することも多々ある。

実際には5か所ほど書き間違えがあるだけですが、実際にコンパイルするとそれ以上のエラーが発生します。

C#コンパイラーから見ると一つの書き間違えがあると、その後に続くソースコードも間違った書き方になってしまいます。
その結果、一つの間違いから複数のコンパイルエラーが発生することになります。

また、コンパイルエラーの原因は書き間違えただけなのですが、実際にエラーとして出力される内容にはそう書かれていません。このようにミスした内容とコンパイルエラーの内容が異なることもよくあります

このような時はファイルパスと行番号からミスした内容を推測するしかないので、コンパイルエラーの対処法の経験を積んでいきましょう!

コンパイルエラー実例3: 型名・変数名ミス

コンパイルエラー 変数名ミス
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
 
publicclassSample:aaaMonoBehaviouraaa{// <- 型名ミス
    publicfoaltValue=0.1f;// <- 型名ミス foalt -> float
    publicColorColor=Color.white;
    publicMeshRendererMesh;
 
    // Start is called before the first frame update
    voidStart(){
        Mesh.material.color=Coloraaa;// <- 変数名ミス
    }
 
    // Update is called once per frame
    voidUpdate(){
        transform.position+=newVector3(Vauel,0,0);// <- 変数名ミス Vauel -> Value
    }
}

今回のサンプルコードでは段階的にコンパイルエラーが発生します。

コンパイラーはスクリプト上にある書き間違えを検出してくれますが、一度に全てのミスを検出してくれる訳ではありません

書き間違えがあった場合は実装上の都合や処理速度の向上などの理由から、それ以降のひとまとまりとして扱えるコードの塊のコンパイルをスキップする場合があります。

なので、一度コンパイルエラーを修正してもさらに他のエラーが出るということもプログラミング作業中ではよくあることですので根気よく修正していってください。

それでは、まずこの状態でコンパイルするとCS0246のエラーが発生します。

CS0246 型名ミスの画像

型名を間違えた時のコンパイルエラー。エラー内容をよく読むと型名と名前空間のどちらかの名前なのかわからない的な内容になっている。

このエラーはスクリプトの中で書いた型名または名前空間をコンパイル環境から検索してみたけど一致するものがない時に発生します。

原因としては名前の書き間違えが主な原因です。その他に開発経験を積んで他の人が作ったライブラリ、フレームワークを使った時にそれらと開発環境をリンクし忘れている時にも発生します。

どちらにしても設定し忘れが原因になってきます。

今回のサンプルコード上では5行目と7行目にコンパイルエラーが発生していますので、そちらを修正しましょう!

修正してみますと残念ながらコンパイラーは次のミス(CS0103)を発見し、まだコンパイルに失敗します。

CS0103 変数名間違えの画像

変数名を間違えた時のコンパイルエラー。こちらは現在のスクリプトの環境の中にはそんな名前を持つものはないという内容のエラーになっている。

こちらはエラーが発生した部分から見て、ColoraaaVauelという名前の変数がないときに発生します。

今回の場合は単純に書き間違えがコンパイルエラーの原因なので、変数名の修正を行うだけで解決するので修正してみましょう!

修正できたら今回のケースではこれ以上のコンパイルエラーは発生しないはずです。

めでたくエラー修正を行うことができました!

スコープについて

今後、より複雑なスクリプトを書いていくようになると、変数やクラスのスコープ(scope)という概念がプログラミングの中に出てきます。

これは変数やクラスには使用できる範囲というもの存在しており、ある変数の使用有効範囲(スコープ)から外れたところでその変数を使った時にもこのコンパイルエラーは発生します。

スコープにつきましてはまた別の部分で詳しく解説していきたいと思います。

ちなみにpublicもスコープに関係するC#のキーワードになります。

コンパイルエラーの種類はまだまだたくさんある・・・が経験を積んで乗り越えよ!

ここまで、コンパイルエラーとその解決法についてみてきました。ここで紹介したもの以外にもコンパイルエラーは大量に存在していますので、その全てを解説することは難しいです。

コンパイルエラーは初心者の方から見るととても難解なもので修正しにくいものに見えますが、基本的には書き間違え、アプリの開発環境の設定し忘れなどが原因になります。

なので、恐れずエラーの内容を読んでみたり、エラー番号やエラー文で検索してみたり、他の人に質問してみてください。解決した時は大体は些細なミスが多いものです。(一部本当に難しいものやコンパイラーのバグなどもありますが…)

以上で、コンパイルエラーについての解説を一旦終わりたいと思います。

次の記事の方に進んでみましょう!

次の記事:

Unity C# 変数と型の使い方 宣言や代入・型変換について
前回はコンパイルエラーとその対処法について解説しました。前回の記事:今回の記事ではC#の文法についてみていきましょう!プログラミングにおいて最重要な変数と型についてしっかり解説しています。型については、初心者さんはいきなり全部を理解しようと...
feynman.co.jp
2023.02.04

初心者向けUnityC#入門講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

関連記事

Unity C#入門講座

UnityC#の例外処理の使い方 throw, try, catch, finally文について

今回の記事では例外処理について解説していきます。例外処理はアプリ実行時に予想していない自体が発生した時に使用するC#の機能になります。例外処理をマスターしてばっちりエラーハンドリングしていきましょう。前回の記事:例外処理とは例外処理とはアプ...
2023.04.23
Unity C#入門講座
Unity C#入門講座

Unity C# 変数と型の使い方 宣言や代入・型変換について

前回はコンパイルエラーとその対処法について解説しました。前回の記事:今回の記事ではC#の文法についてみていきましょう!プログラミングにおいて最重要な変数と型についてしっかり解説しています。型については、初心者さんはいきなり全部を理解しようと...
2023.02.04
Unity C#入門講座
Unity C#入門講座

UnityC#のLinq・属性・拡張メソッド・クラスの部分定義の使い方

今回の記事では拡張メソッド、Linq、属性、クラスの部分定義など開発にとても役立つC#の機能を説明します。前回のデリゲートとイベントはちょっと難易度が高かったですが、今回の記事はもう少し取り組みやすくなります。ぜひ読んでみてください。前回の...
2023.04.22
Unity C#入門講座
Unity C#入門講座

Unity C#の演算子の使い方をマスターしよう

今回の記事では演算子について解説していきます。演算子は簡単に言うと、足し算、掛け算、引き算、割り算などを意味する記号ですね。プログラミングする上ではこうした四則演算以外でも演算子を利用することがあります。以前の記事の中でも既にいくつか使用さ...
2023.03.06
Unity C#入門講座
Unity C#入門講座

Unity C#の繰り返し処理の使い方 for文・while文・foreach文

今回の記事では繰り返し処理についてみていきます。アプリ開発ではたくさんのデータに対して同じ処理を行いたい時があるのですが、その時に繰り返し処理を利用することになります。前回の条件分岐の制御文と併せてプログラミングの超重要ポイントの一つです。...
2021.09.11
Unity C#入門講座
Unity C#入門講座

UnityC# 辞書(ディクショナリー)の使い方 キーと値でデータを指定する

今回の記事では辞書型(ディクショナリー、Dictionary)について解説します。辞書型も前回扱ったListクラスと同じくコレクションの一種になります。前回の記事:簡単にデータにアクセスできる辞書型(ディクショナリー)って何?辞書型はキーと...
2023.04.21
Unity C#入門講座

コメント

コメントをどうぞコメントをキャンセル

メールアドレスが公開されることはありません。

CAPTCHA


↓知りたいことを検索してね

Unity入門の森 インディーゲームリリース!

魔女と召喚獣

 

Seeker of Darkness

 

呪術迷宮をリリース

unity入門の森 ゲームの作り方のyoutubeチャンネル

unity入門の森 ゲームの作り方
「unity入門の森 ゲームの作り方」のyoutubeチャンネル。unityを用いたゲームプログラミング、unityスクール、ゲームクリエイターになりたい方向けの情報を中心に発信。インディーゲームクリエイター・プロゲーマー・ゲーム実況者を目...
www.youtube.com

ブログランキング参加中(クリックして応援してくれると嬉しいな)

にほんブログ村 教育ブログ プログラミング教育へ
にほんブログ村

カテゴリー

最近の投稿

タイトルとURLをコピーしました

[8]ページ先頭

©2009-2025 Movatter.jp