Unityに関連する記事です

 CS 1061 エラーの対処方法について学習します。
MicroSoft
コンパイラ エラー CS1061



エラーの検証を行い、問題箇所を特定する

1.考え方


 エラーの発生している場所についてはエディターがヒントを提示してくれますが、
エラーの内容が理解できなければ、原因を特定することができないため、エラーを解消することが出来ません。

 そのため、問題点を切り分けて考えるという考え方が重要になります。


2.エラーの発生している行を調べる


 該当の CS 1061 エラーは、Unity の Console ビューに表示されます。
ダブルクリックすることでエディターのエラー箇所に移動しますので、その行でエラーが発生していることを、まずは理解します。

 Console ビューに表示されるエラーの表示方法には規則がありますので、まずはそちらを覚えましょう。
その上でスクリプトの何行目でエラーが出ているかを調べていくことになります。


3.原因を調べる


 CS 1061 エラーの具体的な原因としては、以下の3つが考えられます。

  (竸名、あるいはメソッドの名前(綴り)が間違っている
 ◆(竸名、あるいはメソッドが存在していない
  アクセス修飾子が間違っている

 いずれにも当てはまる原因として、プログラムを記述する際の書き間違えに起因していることが分かります。

 つまりこのエラーは、初心者であるほど遭遇する確率の高いエラーであり、
プログラムの内容を読み解けていないと、原因の特定と解消することが難しい内容のエラーになります。


4.< (竸名、あるいはメソッドの名前(綴り)が間違っている>


 最も多い原因の1つです。メソッドの呼び出し命令と、その呼び出し先である変数やメソッドの名前が間違っているケースです。

 解消方法としては、つづりの間違いを修正します。

<エラー>
 int hp;

  Hp = 10;  // <= 変数名が宣言している名前と異なっている

 ↓

<解消>
 int hp;

  hp = 10;  // <=  m を M に修正して、整合性を確保



<エラー>
 MoveEnemy();

  private void moveEnemy(){    // <=  呼び出し命令とメソッド名が異なっている
 
  }

 ↓

<解消>
 MoveEnemy();

  private void MoveEnemy(){     // <=  m を M に修正して、整合性を確保
 
  }


5.<◆(竸名、あるいはメソッドが存在していない>


 スクリプト内にメソッドの呼び出し命令で利用している変数名、あるいはメソッドの名前が存在していない場合も、CS1061 エラーになります。
 
 解消方法としては、呼び出し命令に必要な変数名、あるいはメソッドの宣言を作成するか、
すでにスクリプト内に存在している変数名、あるいはメソッドの名前に書き換えます。


<エラー>
 int hp;

  x = 10;  // <= 利用している変数が存在していない

 ↓

<解消 
 int hp;

  hp = 10;  // <=  利用可能な変数名に変更して整合性を確保

<解消◆
 int hp;
  int x;

  x = 10;  // <=  変数を宣言して整合性を確保



<エラー>
 MoveEnemy();

  private void Move(){    // <=  MoveEnemy という呼び出し命令に対応するメソッドが存在していない
 
  }

 ↓

<解消 
 MoveEnemy();

  private void MoveEnemy(){     // <=  メソッド名を変更して、整合性を確保
 
  }


<解消◆
 Move();     // <=  呼び出し命令を変更して、整合性を確保

  private void Move(){
 
  }


<解消>
 MoveEnemy();

  private void Move(){
 
  }

  private void MoveEnemy(){     // <=  新しいメソッドを宣言して、整合性を確保
 
  }


6.< アクセス修飾子が間違っている>


 外部のクラスに存在している変数やメソッドにアクセスを行う場合、
命令を受ける側の外部のクラスの変数やメソッドのアクセス修飾子が private や protected で宣言されていると
外部のクラスからの呼び出し命令を受けることができないため、エラーになります。

 その場合、アクセス修飾子を public に変更することでエラーを解消出来ます。


<エラー>
  public class A {
     private int hp;
  }

  public class B {
 
      public A a;
 
      void Start () {
          a.hp = 10;  // <= 利用している変数が private 修飾子であり、外部からのアクセスが許可されないためエラーになる
      }
  }

 ↓

<解消>
  public class A {
     public int hp;  // <= 外部のクラスで利用できるように private 修飾子を public 修飾子に変更することで、外部のクラスからのアクセスを許可する
  }

  public class B {
 
      public A a;
 
      void Start () {
          a.hp = 10;    // <= public 修飾子であるため、アクセスが許可されて整合性を確保
      }
  }



<エラー>
  public class A {

      private void MoveEnmey(){
 
      }
  }

  public class B {

      public A a;
 
      void Start () {
          a.MoveEnmey(0;    // <= 命令しているメソッドが private 修飾子であるため、アクセスが許可されないため、エラーになる
      }
  }

 ↓

<解消 
  public class A {

      public void MoveEnmey(){  // <= 外部のクラスで利用できるように private 修飾子を public 修飾子に変更することで、外部のクラスからのアクセスを許可する
 
      }
  }

  public class B {

      public A a;
 
      void Start () {
          a.MoveEnmey(0;    // <=  命令するメソッドが public 修飾子であるため、外部のクラスから A のクラスのメソッドにアクセスが許可されて整合性を確保
      }
  }



 以上になります。

 いずれの場合もプログラムを書き間違えていたり、アクセス修飾子の種類が間違っているケースに発生するエラーになりますので、
何回かエラーを直していくことで、原因と対処方法を学習することが出来ます。

 エラーが表示されることは問題ではなく、何が原因なのか、どうすれば解消できるのか、次からは何を気を付ければいいのか、
そういった部分をしっかりと学習していくことが、今後のプログラムのスキルの向上につながります。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます