

UnityのVisual Studioでのプログラミングに関する質問です。

私は以下のウェブサイトを参考に2Dのシューティングゲームを作っているのですが、以下のソースコードをAsset、Prehab内のplayerに入れようとしてもエラーが出て入れられない状態です。  
自分勝手で申し訳ないですがUnity、C＃言語共に初心者なので専門的な単語は少な目で解決策を教えてください。

一応Visual Studioで何かしらいじくる必要があると言っているのはわかるのですが初心者でウェブサイト通りに進めただけなのでイマイチ分からないです。

[[Unity] 2Dシューティングゲームを作る 2
[チュートリアル]](https://techblog.primestructure.co.jp/2019/05/25/unity-2d%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B-2-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/)

**エラーメッセージ**

[code]

    Can't add script behaviour AssemblyInfo.cs. The script needs to derive MonoBehaviour
    
[/code]

[![](https://i.stack.imgur.com/MnQQw.png)](https://i.stack.imgur.com/MnQQw.png)

**ソースコード**

[code]

    Player.cs
    using UnityEngine;
    using System.Collections;
    
    namespace CompletedAssets
    {
        public class Player : MonoBehaviour
        {
            // Spaceshipコンポーネント
            Spaceship spaceship;
    
            IEnumerator Start ()
            {
                // Spaceshipコンポーネントを取得
                spaceship = GetComponent<Spaceship> ();
    
                while (true) {
    
                    // 弾をプレイヤーと同じ位置/角度で作成
                    spaceship.Shot (transform);
    
                    // ショット音を鳴らす
                    GetComponent<AudioSource> ().Play ();
    
                    // shotDelay秒待つ
                    yield return new WaitForSeconds (spaceship.shotDelay);
                }
            }
    
            //移動のスピード
            public float speed = 5;
    
    
            void Update ()
            {
                // 右・左
                float x = Input.GetAxisRaw ("Horizontal");
    
                // 上・下
                float y = Input.GetAxisRaw ("Vertical");
    
                // 移動する向きを求める
                Vector2 direction = new Vector2 (x, y).normalized;
    
                //移動する向きとスピードを代入する
                GetComponent<Rigidbody2D>().velocity = direction * speed;
    
                // 移動の制限
                Move (direction: direction);
    
            }
    
            // 機体の移動
            void Move (Vector2 direction)
            {
                // 画面左下のワールド座標をビューポートから取得
                Vector2 min = Camera.main.ViewportToWorldPoint (new Vector2 (0, 0));
    
                // 画面右上のワールド座標をビューポートから取得
                Vector2 max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1));
    
                // プレイヤーの座標を取得
                Vector2 pos = transform.position;
    
                // 移動量を加える
                pos += direction * spaceship.speed * Time.deltaTime;
    
                // プレイヤーの位置が画面内に収まるように制限をかける
                pos.x = Mathf.Clamp (pos.x, min.x, max.x);
                pos.y = Mathf.Clamp (pos.y, min.y, max.y);
    
                // 制限をかけた値をプレイヤーの位置とする
                transform.position = pos;
            }
    
            // ぶつかった瞬間に呼び出される
            void OnTriggerEnter2D (Collider2D c)
            {
                // レイヤー名を取得
                string layerName = LayerMask.LayerToName (c.gameObject.layer);
    
                // レイヤー名がBullet (Enemy)の時は弾を削除
                if (layerName == "Bullet (Enemy)") {
                    // 弾の削除
                    Destroy (c.gameObject);
                }
    
                // レイヤー名がBullet (Enemy)またはEnemyの場合は爆発
                if (layerName == "Bullet (Enemy)" || layerName == "Enemy") {
                    // Managerコンポーネントをシーン内から探して取得し、GameOverメソッドを呼び出す
                    FindObjectOfType<Manager> ().GameOver ();
    
                    // 爆発する
                    spaceship.Explosion ();
    
                    // プレイヤーを削除
                    Destroy (gameObject);
                }
            }
    
            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
    
            public override bool Equals(object other)
            {
                return base.Equals(other);
            }
    
            public override string ToString()
            {
                return base.ToString();
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-01-22T14:44:33.083
62463
2023-11-17T02:07:25.863
2020-01-22T16:45:35.543
3060
36859
question
c# unity2d
Unityの"Can't add script"のエラーの解決策


この問題はスクリプトのせいではありません。

以下のことをやってください：

  * スクリプトをメモ帳にコピーします。
  * スクリプトを削除します。
  * Visual Studioを閉じます。
  * Unity Editorから新しいスクリプトを作成します（以前とまったく同じ名前）
  * Unity Editorからスクリプトをダブルクリックして開きます。
  * メモ帳コードを内部に貼り付けて保存します。

もしできなかった場合は他の答えを参考してください。


CC BY-SA 4.0
2020-01-22T15:36:58.623
62464
2021-04-16T03:54:31.877
2021-04-16T03:54:31.877
3060
37554
62463
answer