【unity】シューティングゲームを作ろう

技術関連

【unity】シューティングゲームを作ろう

プロジェクトの作成

素材の登録

Projectビューに以下の素材をドラッグ&ドロップする。

プレイヤーの画像
player.png
敵の画像
Enemy.png
弾の画像
tama.png

プレイヤー作成

プレイヤーの登録

プレイヤーの絵をヒエラルキーにドラッグ&ドロップ

Box Collider 2Dの登録

インスペクタービューから「Add Component」で「physics2D」->「Rigidbody 2D」を追加、Body Typeを Kinematicにする。そのあとSizeを調整してください。

スクリプトを作る

projectViewを右クリックして「Create」->「C# Script」を選択Scriptが追加されるので、名前を「PlayerCtrl」にする。

スクリプトを書く

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCtrl: MonoBehaviour
{

    //プレイヤーが動くスピード
    public float moveSpeed = 0.1f;

  //動作するためのメンバー
    public Rigidbody2D rb;

  //動作のためのベクター
    Vector2 movement;

  //発射する玉のプレハブ
    public GameObject bullet;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();   
    }

    // Update is called once per frame
    void Update()
    {
    //球を発射する
        if(Input.GetButtonDown("Fire1"))
        {
            Instantiate(bullet, transform.position, Quaternion.identity);
        }
    
    //移動ボタンが押されたら移動する
        movement.x = Input.GetAxisRaw("Horizontal");
        transform.Translate(movement * moveSpeed);

    }
}

書いたソースをPlayerにドラッグ&ドロップ

Projectの「PlayerCtrl」をヒエラルキーのplayerにドラッグアンドドロップする。

動作確認

プレイヤーが左右に動くことを確認してください。

弾の作成

弾の登録

弾の絵をヒエラルキーにドラッグ&ドロップ。大きさをTransformのScaleから変える。

Rigidbody 2Dの登録

インスペクタービューから「Add Component」で「physics2D」->「Rigidbody 2D」を追加、Body Typeを Kinematicにする。

Box Collider 2Dの登録

インスペクタービューから「Add Component」で「physics2D」->「Box Collider 2D」を追加、Body Typeを Kinematicにする。そのあとSizeを調整してください。

スクリプトを作る

projectViewを右クリックして「Create」->「C# Script」を選択Scriptが追加されるので、名前を「Bullet」にする。

スクリプトを書く

ファイルをダブルクリックして、以下の内容を書き込む

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Bullet : MonoBehaviour
{
    /// <summary>
    /// 移動スピード
    /// </summary>
    public float speed = 0.1f;

    /// <summary>
    /// 当たった時のエフェクト
    /// </summary>
    public GameObject hitEffect;


    /// <summary>
    /// スコアを表示するテキスト
    /// </summary>
    Text score;

    // Start is called before the first frame update
    void Start()
    {
        score = GameObject.Find("Score").GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        // 下から上に弾を移動
        transform.position += new Vector3(0, speed, 0);// * Time.deltaTime;

    }

    /// <summary>
    /// 画面外に出た時の処理
    /// </summary>
    void OnBecameInvisible()
    {
        Destroy(this.gameObject);
    }

    /// <summary>
    /// 何かとぶつかったときの処理
    /// </summary>
    /// <param name="collision"></param>

    //private void OnCollisionEnter2D(Collision2D collision)
    private void OnTriggerEnter2D(Collider2D collision)
    {
        //タグがEnemyだったら
        if (collision.tag == "Enemy")
        {
            GameObject effect = Instantiate(hitEffect, collision.transform.position, 
                                            Quaternion.identity);

            score.text = (int.Parse(score.text) + 10).ToString("D4");

            Destroy(collision.gameObject);
            Destroy(effect, 2f);
            Destroy(gameObject);

        }
    }
}

書いたソースをBulletにドラッグ&ドロップ

Projectの「Bullet」をヒエラルキーのtamaにドラッグアンドドロップする。

動作確認

弾が上に動くことを確認してください

弾に爆発エフェクトを追加する(爆発エフェクトが作ってある場合)

ヒエラルキーのtamaをクリックし、Inspectorビューの「Bullet(Script)」のHitEffectに、ProjectViewの爆発エフェクトをドラッグアンドドロップしてください。

弾のエフェクトを作る際にはこちらの記事を参考にしてください

弾のプレハブを作る

「Hierarchy(ヒエラルキー)ビュー」のtamaをProjectファイルにドラッグ&ドロップする。

プレイヤーに弾を登録する

「Hierarchy(ヒエラルキー)ビュー」のPlayerを選択し、インスペクタービューの「Player Ctrl(Script)」を見つける。その中のBulletにtamaのプレハブをドラッグアンドドロップ

スコアの表示領域を作る

HierarchyビューからUI->Textを選択し、名前を「Score」に変え、テキストを0000にする。

敵の作成

敵の登録

敵の絵をヒエラルキーにドラッグ&ドロップ

Rigidbody 2Dの登録

インスペクタービューから「Add Component」で「physics2D」->「Rigidbody 2D」を追加、Body Typeを Kinematicにする。

BoxColloider2Dの登録

インスペクタービューから「Add Component」で「physics2D」->「Rigidbody 2D」を追加、そのあとSizeを調整してください。

タグを登録する

Inspectorビューの一番上のTagの横にあるドロップダウンリストをクリックし、メニュー内のAdd Tagをクリック。「Tags」にある「+」をクリック「New Tag Name」に「Enemy」をいれて「Save」。

「Hierarchy(ヒエラルキー)ビュー」のEnemyをクリックして、Tagから「Enemy」を選択する。

スクリプトを作る

projectViewを右クリックして「Create」->「C# Script」を選択Scriptが追加されるので、名前を「EnemyCtrl 」にする。

スクリプトを書く

ファイルをダブルクリックして、以下の内容を書き込む

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyCtrl : MonoBehaviour
{
    // プレイヤーの移動速度
    public float Speed;

    // 弾のプレハブ
    public GameObject bulletPrefab;

    private float moveY;          // X軸の移動量

    // Start is called before the first frame update
    void Start()
    {
        moveY = -10;
    }

    // Update is called once per frame
    void Update()
    {
        transform.position += new Vector3(0, moveY, 0) * Time.deltaTime;
    }


    /// <summary>
    /// 画面外に出た時の処理
    /// </summary>
    void OnBecameInvisible()
    {
        Destroy(this.gameObject);
    }
}

書いたソースをEnemyにドラッグ&ドロップ

今書いたスクリプトファイルををヒエラルキーのEnemyにドラッグアンドドロップする。

敵の生成される位置を決める

敵の画像を動かして敵を生成させたい位置に移動する。

プレハブを作る

「Hierarchy(ヒエラルキー)ビュー」のEnemyをProjectファイルにドラッグ&ドロップしてプレハブにします。

敵を出現させる

管理コンポーネントを登録

「Hierarchy(ヒエラルキー)ビュー」を右クリックし「Create Empty」を選択する。

スクリプトを作る

projectViewを右クリックして「Create」->「C# Script」を選択Scriptが追加されるので、名前を「GameController」にする。

スクリプトを書く

ファイルをダブルクリックして以下の内容をファイルに書く。

InstantiateのRandomの中を敵の出現させたい値に変えるのを忘れないように。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameCtrl : MonoBehaviour
{
	public GameObject enemyPrefab;

	void Start()
	{
		InvokeRepeating("EnemyCreate", 1, 1);
	}

	void EnemyCreate()
	{
		Instantiate(enemyPrefab, new Vector3(Random.Range(-30f,30f), 33, 0),
                            new Quaternion(180f,0,0,0));
	}
}

書いたソースをGameObjectにドラッグ&ドロップ

今書いたスクリプトファイルををヒエラルキーのGameObjectにドラッグアンドドロップする。

敵のプレハブを登録

GameObjectを選択し、InspectorビューののGameController内の、「EnemyPrefab」にProject内のEnemy(プレハブ)をドラッグ&ドロップする。

しあげ

必要のないコンポーネントを消す

「Hierarchy(ヒエラルキー)ビュー」内の、Enemyを右クリックし、「Delete」を選択して消す。同様に「tama」も消す。

プレーヤーの位置を決める

プレーヤーを画面下中央に持ってくる

タイトルとURLをコピーしました