スポンサーリンク
エラー・トラブルシューティング

【Unity C#】CSエラー一覧と原因・対処法まとめ|CS0246・CS0103・CS0029など初心者向け完全ガイド

エラー・トラブルシューティング

Unityでスクリプトを書いていると、突然「CS0246」や「CS0103」などのエラーが表示されて困った経験はありませんか?エラー番号だけでは何が原因なのか分かりづらく、「どこから直せばいいの?」と手が止まってしまうことも少なくありません。

この記事では、Unityで初心者が特によく遭遇する代表的なCSエラーを取り上げ、それぞれの原因と対処法をわかりやすく解説します。エラー番号ごとに確認できるようにまとめているので、今表示されているエラーの解決に役立ててください。


UnityのCSエラー一覧と原因・対処法

CSエラーは、C#のコードをUnityが正しく読み取れないときに表示されるコンパイルエラーです。まずはConsoleに出ているエラー番号を見て、下の一覧から近いものを確認してみましょう。

エラー番号よくある原因最初に見る場所
CS1002セミコロン不足行末
CS0246型・名前空間が見つからないusing、スペル、参照設定
CS0103変数やメソッド名が見つからない名前のスペル、宣言場所
CS0029型が合っていない代入している値の型
CS0120インスタンスが必要staticではないメンバーの呼び出し
CS1061存在しない機能を呼び出しているメソッド名、プロパティ名、型



CS1002:セミコロン不足

CS1002は、文の終わりに必要なセミコロン「;」が抜けているときによく出ます。

たとえば、次のようなコードです。

int score = 10
Debug.Log(score);

1行目の最後にセミコロンがないため、C#として正しく読めません。

int score = 10;
Debug.Log(score);

判断基準はシンプルです。エラーが出た行、またはその1つ上の行の末尾を見て、セミコロンや閉じカッコが抜けていないか確認してみてください。

CS0246:型・名前空間が見つからない

CS0246は、UnityやC#が「そのクラス名や型名を知らない」と判断したときに出ます。

よくある原因は次の3つです。

  • usingが不足している
  • クラス名や型名のスペルを間違えている
  • 必要なパッケージや参照が入っていない

たとえばUIのTextを使う場合、環境によっては次のようなusingが必要になることがあります。

using UnityEngine.UI;

判断基準として、「型名そのものに赤い波線が出ている」「Consoleに型名が見つからないと表示される」場合は、まずスペルとusingを確認しましょう。

CS0103:名前が存在しない

CS0103は、変数名やメソッド名が現在の場所から見つからないときに出ます。

たとえば、次のコードではscoreを宣言する前に使っているため、エラーになります。

Debug.Log(score);

int score = 10;

また、変数を別のカッコの中で宣言している場合、その外側から使えないこともあります。これを「スコープ」といいます。

判断基準は、「その名前をどこで宣言したか」です。エラーに表示された名前をコピーして、スクリプト内で検索してみると見つけやすいですよ。

CS0029:型を変換できない

CS0029は、代入しようとしている値の型が合っていないときに出ます。

たとえば、数字を入れる変数に文字列を入れようとするとエラーになります。

int score = "10";

この場合、scoreはint型なので、文字列ではなく数値を入れる必要があります。

int score = 10;

判断基準は、「左側の型」と「右側の値の型」が同じかどうかです。キャストで解決できる場合もありますが、無理に変換すると別の不具合につながることがあるので、まずは型そのものが正しいか確認しましょう。

CS0120:オブジェクト参照が必要

CS0120は、インスタンスが必要なメンバーを、クラス名から直接呼び出そうとしたときによく出ます。

少し難しく見えますが、ざっくり言うと「その機能を使うための実体が作られていない」という状態です。

Player.Move();

Moveがstaticではない場合、このようにクラス名から直接呼ぶことはできません。先にPlayer型の変数を用意して、その変数から呼び出す必要があります。

Player player = new Player();
player.Move();

判断基準は、「クラス名.メソッド名」の形で呼んでいないかです。staticではないメソッドや変数を使う場合は、基本的にインスタンス経由で呼び出します。

CS1061:メンバーが存在しない

CS1061は、その型に存在しないメソッドやプロパティを呼び出したときに出ます。

たとえば、Transformに存在しない名前のメソッドを呼ぶとエラーになります。

transform.MoveForward();

この場合、TransformにはMoveForwardという標準メソッドはありません。自分で作ったメソッドなのか、別の型にあるメソッドなのかを確認する必要があります。

判断基準は、「呼び出している相手の型が本当にその機能を持っているか」です。スペルミスだけでなく、変数の型を間違えている場合もあるので、ドットの左側にある変数にも注目しましょう。

ここまで確認してもエラーが消えない場合は、1つのミスが他のエラーを連鎖させている可能性があります。次は、Consoleにエラーが大量に出たときの直し方を見ていきましょう。




CSエラーが大量に出た時の直し方

ConsoleにCSエラーがずらっと並ぶと、全部直さないといけないように見えて焦りますよね。ですが、最初の1つのミスが原因で、後ろのエラーがまとめて出ていることもよくあります。

まずは、エラーの数ではなく「どの順番で直すか」を決めましょう。

最初のエラーから直す

CSエラーが複数出ている場合は、Consoleの上にあるエラーから確認します。

判断基準は、次の通りです。

  • 同じスクリプト名が何度も出ているなら、最初の行を優先する
  • 10件以上出ていても、まずは一番上の1件だけを見る
  • セミコロンやカッコ不足のエラーが上にあるなら先に直す

特にCS1002のような文法ミスは、後ろのコードまで巻き込んで別のエラーを出すことがあります。最初のエラーを直して保存すると、他のエラーが一気に消えることもありますよ。

Consoleから該当行へ移動する

UnityのConsoleに表示されたエラーは、ダブルクリックするとコードエディタの該当行へ移動できます。

基本の流れは次の通りです。

  1. UnityのConsoleを開く
  2. 一番上の赤いエラーを確認する
  3. エラーをダブルクリックする
  4. 開いた行と、その1つ上の行を確認する
  5. 修正したら保存してUnityに戻る

エラー行そのものではなく、1つ上の行に原因がある場合もあります。セミコロン、閉じカッコ、スペルミスは特に見落としやすいので、周辺の数行も一緒に確認すると安心です。

Consoleの見方をもう少し整理しておきたい場合は、コチラの記事も参考になります。

補完・波線も確認する

Visual StudioやRiderなどのコードエディタでは、エラーになりそうな場所に赤い波線が出ることがあります。

Consoleだけで原因が見つからないときは、次の場所も確認してみましょう。

  • 赤い波線が出ている単語
  • 補完候補に出てこないメソッド名
  • 色が変わっていないクラス名や型名
  • usingが薄い表示になっていないか

判断基準として、「入力した名前が補完候補に出ない」「型名に色が付かない」場合は、スペルミスやusing不足の可能性があります。

もしUnity関連の補完がほとんど出ない場合は、コードのミスではなくエディタ側の設定が原因かもしれません。その場合は、コチラの記事を確認してみてください。

ここまで確認しても原因が見つからない場合は、CSエラーではなく、実行中に起きる別のエラーと混同している可能性もあります。最後に、よく迷いやすい疑問を整理しておきましょう。


※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク