前回ははじめてのUnity C#プログラミングに挑戦しましたね。
前回の記事↓
プログラミングではコンパイルエラーが付き物です。
コンパイルエラーはスクリプトの書き方が間違っていることを私たちに教えてくれる機能となります。コンパイルエラーが発生しても、慌てず対処法を覚えることでスムーズにプログラミングしていくことができるようになります。
この記事の最後には初心者が起こしやすいコンパイルエラーとその対処法についていくつか解説していますので、困った時はそちらを参考にしてください。
コンパイルエラーの種類と対処方法
今回、初めてプログラミングをした方の中には、スクリプトを書いているうちにUnity Editorのコンソール画面に何やら赤いテキストが表示されたかもしれません。
その赤いテキストがコンパイルエラーです。
C#コンパイラーが「スクリプトをビルドする時に何が書かれているのかわからない」と判断した時に表示されるものです。
簡単に言うと、あなたのプログラムの書き方にミスがあったということです。
プログラミング初心者がつまずくポイントで多いのは、このコンパイルエラーの意味がよくわからずにそのまま挫折してしまうことです。
コンパイルエラーを取り除けないとUnityを動かすことができませんからね。
そんな憎らしいコンパイルエラー。
でも、コンパイルエラーはC#コンパイラーがスクリプトの中に書き方のミスがあったことを教えてくれるものなので、むしろ間違いを直すためのヒントを与えてくれます。
さらに、ミスした部分がスクリプトのどの行にあるのかも教えてくれるので、エラーを怖がらずに表示されたテキストを見てみましょう!
コンパイラエラーの見方
コンパイルエラーが発生した時は基本的にコンソールタブ上に出力されます。コンソールタブの開き方は上の方で説明してるので、そちらを参照してください。
以下の画像で示されているコンソールタブにはコンパイルエラー以外にもアプリ実行時のエラーやログが出力されます。
このタブが開発の手助けをしてくれます。
基本的にコンパイルエラーは次のような形式をとっています。
- 発生したファイルとその行、列番号
- エラー番号
- コンパイルエラーの詳細な内容
使用している環境によっては、エラーテキストが英語のままになっているかもしれません。
その場合でもエラー番号と発生したファイルと行、列番号については共通しています。
そこに表示されるテキストが全て読めなくてもなんとなくコンパイルエラーの原因がわかるようになってきますので、コンパイルエラーの対処の経験をどんどん積んでいきましょう!
よくあるコンパイルエラーとその対処法
次によくあるコンパイルエラーについて解説していきます。
ただ、コンパイルエラーも膨大な数が存在しているため、その全てについて解説するのは難しいため、ここではよくあるコンパイルエラーについていくつか抜粋しています。
どうしてもわからなくなった時は初めから書き直してみるのもオススメです。
また、コンパイルエラー文章をコピペして検索してみましょう。解決法が見つかるかもしれません。
また、一つコンパイルエラーが発生した時は発生した場所以外にもコンパイルエラーが100個単位で大量に発生することがよくあります。
ですが、エラーの原因が実は一つということもよくあります。
なので、エラーを修正する時はなるべくコンソールタブの上の方にあるものから直していくとあっという間にコンパイルエラーがなくなっていくでしょう。
コンパイルエラー実例1: セミコロン忘れ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sample : MonoBehaviour { public float Value = 0.1f // <- 文末の';'忘れ public Color Color = Color.white // <- 文末の';'忘れ public MeshRenderer Mesh // <- 文末の';'忘れ // Start is called before the first frame update void Start() { Mesh.material.color = Color // <- 文末の';'忘れ } // Update is called once per frame void Update() { transform.position += new Vector3(Value, 0, 0) // <- 文末の';'忘れ } } |
上のサンプルコードを書きますと、エラー番号 CS1002のコンパイルエラーが発生します。
エラー内容は ; expected
とありますが、これは単純に;(セミコロン)
を文末に付けるのを忘れていることを表しています。
画像にあるコンパイルエラーは全てこの;
忘れによるもので、それぞれAssets/Sample.csの
- 6行目
- 7行目
- 8行目
- 12行目
- 17行目
にエラーが発生していることが読み取れます。
なので、解決方法としては上にあげたエラー発生箇所に;
をつけるだけの簡単なコンパイルエラーになります。
コンパイルエラー実例2: キーワードミス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; usingaaa UnityEngine; // <- キーワードミス pubadsax aaclass Sample : MonoBehaviour { // <- キーワードミス public float Value = 0.1f; pubacnei Color Color = Color.white; // <- キーワードミス public MeshRenderer Mesh; // Start is called before the first frame update asoiv Start() { // <- キーワードミス 型名ミスと同じ感じになる Mesh.material.color = Color; } // Update is called once per frame void Update() { transform.position += new Vector3(Value, 0, 0); } } |
上のサンプルコードを書きますと、色々な種類のコンパイルエラーが発生します。
実際には5か所ほど書き間違えがあるだけですが、実際にコンパイルするとそれ以上のエラーが発生します。
C#コンパイラーから見ると一つの書き間違えがあると、その後に続くソースコードも間違った書き方になってしまいます。
その結果、一つの間違いから複数のコンパイルエラーが発生することになります。
また、コンパイルエラーの原因は書き間違えただけなのですが、実際にエラーとして出力される内容にはそう書かれていません。このようにミスした内容とコンパイルエラーの内容が異なることもよくあります。
このような時はファイルパスと行番号からミスした内容を推測するしかないので、コンパイルエラーの対処法の経験を積んでいきましょう!
コンパイルエラー実例3: 型名・変数名ミス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sample : aaaMonoBehaviouraaa { // <- 型名ミス public foalt Value = 0.1f; // <- 型名ミス foalt -> float public Color Color = Color.white; public MeshRenderer Mesh; // Start is called before the first frame update void Start() { Mesh.material.color = Coloraaa; // <- 変数名ミス } // Update is called once per frame void Update() { transform.position += new Vector3(Vauel, 0, 0); // <- 変数名ミス Vauel -> Value } } |
今回のサンプルコードでは段階的にコンパイルエラーが発生します。
コンパイラーはスクリプト上にある書き間違えを検出してくれますが、一度に全てのミスを検出してくれる訳ではありません。
書き間違えがあった場合は実装上の都合や処理速度の向上などの理由から、それ以降のひとまとまりとして扱えるコードの塊のコンパイルをスキップする場合があります。
なので、一度コンパイルエラーを修正してもさらに他のエラーが出るということもプログラミング作業中ではよくあることですので根気よく修正していってください。
それでは、まずこの状態でコンパイルするとCS0246のエラーが発生します。
このエラーはスクリプトの中で書いた型名または名前空間をコンパイル環境から検索してみたけど一致するものがない時に発生します。
原因としては名前の書き間違えが主な原因です。その他に開発経験を積んで他の人が作ったライブラリ、フレームワークを使った時にそれらと開発環境をリンクし忘れている時にも発生します。
どちらにしても設定し忘れが原因になってきます。
今回のサンプルコード上では5行目と7行目にコンパイルエラーが発生していますので、そちらを修正しましょう!
修正してみますと残念ながらコンパイラーは次のミス(CS0103)を発見し、まだコンパイルに失敗します。
こちらはエラーが発生した部分から見て、Coloraaa
やVauel
という名前の変数がないときに発生します。
今回の場合は単純に書き間違えがコンパイルエラーの原因なので、変数名の修正を行うだけで解決するので修正してみましょう!
修正できたら今回のケースではこれ以上のコンパイルエラーは発生しないはずです。
めでたくエラー修正を行うことができました!
スコープについて
今後、より複雑なスクリプトを書いていくようになると、変数やクラスのスコープ(scope)という概念がプログラミングの中に出てきます。
これは変数やクラスには使用できる範囲というもの存在しており、ある変数の使用有効範囲(スコープ)から外れたところでその変数を使った時にもこのコンパイルエラーは発生します。
スコープにつきましてはまた別の部分で詳しく解説していきたいと思います。
ちなみにpublic
もスコープに関係するC#のキーワードになります。
コンパイルエラーの種類はまだまだたくさんある・・・が経験を積んで乗り越えよ!
ここまで、コンパイルエラーとその解決法についてみてきました。ここで紹介したもの以外にもコンパイルエラーは大量に存在していますので、その全てを解説することは難しいです。
コンパイルエラーは初心者の方から見るととても難解なもので修正しにくいものに見えますが、基本的には書き間違え、アプリの開発環境の設定し忘れなどが原因になります。
なので、恐れずエラーの内容を読んでみたり、エラー番号やエラー文で検索してみたり、他の人に質問してみてください。解決した時は大体は些細なミスが多いものです。(一部本当に難しいものやコンパイラーのバグなどもありますが…)
以上で、コンパイルエラーについての解説を一旦終わりたいと思います。
次の記事の方に進んでみましょう!
次の記事:
コメント