【Unity初心者向け】CS0116エラー!「A namespace cannot directly contain members such as fields, methods or statements」とは?

ゲーム開発
この記事は約3分で読めます。

こんにちは、@Manabu です。

Unityでゲーム開発を行なっていく中で発生したエラーについて紹介します。

今回は、CS0116エラーというものです。

初見でもわかりやすく解説したいと思います。

発生したエラー

今回発生したエラーは以下になります。

Assets\GameManagement.cs(8,13): error CS0116: A namespace cannot directly contain members such as fields, methods or statements

ゲームマネージャー用のC#スクリプトでスコアを計算して画面に表示させようとしていました。

エラーの内容

「A namespace cannot directly contain members such as fields, methods or statements」というエラーは、名前空間内にフィールドやメソッドを直接定義してしまった場合に発生します

名前空間はクラスや構造体、インターフェースなどをグループ化するものであるため、フィールド(変数)やメソッドは名前空間の中ではなく、クラスや構造体の中に定義しなければなりません。

エラーが発生した処理

namespace GameNamespace
{
  public int score; // error:フィールド(変数)がクラスの外にある

  public class GameManagement : MonoBehaviour
  {

この例だと、scoreというフィールドがクラスの外で直接定義されています。

解決方法

このエラーを解決するためには、全てのフィールドやメソッドをクラスや構造体の中で定義する必要があります

先ほどの処理だと、以下のようにGameManagementクラスの中でフィールドを定義することで解決します。

namespace GameNamespace
{
  public class GameManagement
  {

    public int score; // フィールドはクラス内に配置

エラーの要点

このエラーが発生している時は、以下の点に注意しましょう。

名前空間はクラスや構造体を含む場所であり、フィールドやメソッドを直接含めることはできない。
すべてのフィールドやメソッドは、クラスや構造体の中で定義する必要がある。

また、エラーにはどのスクリプトの何行目で発生しているのか場所も記載されているので、その周辺をよくみて解決するようにしましょう。

まとめ

「A namespace cannot directly contain members such as fields, methods or statements」エラーは、C#の文法に従って、フィールドやメソッドが正しい場所に配置されていないときに発生します。

すべてのフィールドやメソッドは、名前空間内に直接配置するのではなく、必ずクラスや構造体の内部に記述しましょう。