~Unity入門~ 3.ゲームに新たな機能を加えよう

1.Unity入門

ビーム攻撃機能が欲しい・・・

ツクルくん
ツクルくん

このサンプルゲームでは敵を倒す方法はジャンプして踏みつけるしかないけど、それだと真横に敵がいたら対処しにくいなあ・・・

りんちゃん
りんちゃん

それではプログラミングの勉強も兼ねて、真横に発射できるビーム攻撃機能を実装してみましょう!

ビームオブジェクトの作成(Inspectorでの作成など)

りんちゃん
りんちゃん

まず、Hierarchyの空白スペースで右クリック→2D Object→Sprites→Squareを選択します。

りんちゃん
りんちゃん

新しくできたSquareの名前をBeamと変更、右側のInspectorでScaleをX=0.5,Y=0.1に変更、Colorを黄色などの好きな色に変更します。

りんちゃん
りんちゃん

次にInspectorの下側にあるAdd Componentをクリックします。

りんちゃん
りんちゃん

Box Collider 2Dをサーチして選択します。この機能でビームの当たり判定を設定できます。

りんちゃん
りんちゃん

Box Collider 2DがInspectorに追加されたらIs Triggerのチェックボックスにチェックを入れます。これは敵に接触したら判定が生じる、という設定に必要です。

りんちゃん
りんちゃん

続いてRigidbody 2Dをサーチして選択します。この機能でビームの動きなどを設定できます。

りんちゃん
りんちゃん

Gravity Scaleを0に設定します。これによりビームは重力の影響を受けなくなります。(真っ直ぐ飛んでいきます)

ビームオブジェクトの作成(C#スクリプトなどの設定)

りんちゃん
りんちゃん

Unity画面下にあるAssetsウインドウの空白で右クリック→Create→Scripting→Empty C# Scriptを選択します。

りんちゃん
りんちゃん

このファイルについては名前を「BeamCollision」と変更します。変更はファイルを右クリック→Renameからできます。そして名前を変えた後は、ファイルにC#で正しい内容を記述していきます。

ツクルくん
ツクルくん

C#ってプログラミング言語だから、プログラミングをするってこと?なんだか難しそうだなあ・・・

りんちゃん
りんちゃん

今回はあらかじめコードの内容を準備しておきました。これをそのまま使って下さい。

using UnityEngine;
public class BeamCollision : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            // Playerタグのオブジェクトに衝突した場合の処理
            Destroy(collision.gameObject); // 敵を破壊(例)
            Destroy(gameObject); //ビームを破壊
        }
    }
}
ツクルくん
ツクルくん

このプロセスは具体的にどうやるの?

りんちゃん
りんちゃん

まず、先程のBeamCollisionのファイルを右クリック→Openを選択します。するとテキストエディタ(文字を書き込んでいくソフトウェア)が開かれます。まずは、すでに書かれている内容を全消去してから、そこへ上記のC#のコードをコピー&ペーストして下さい。

りんちゃん
りんちゃん

このような内容にできたらOKです。上書き保存をしてから閉じて下さい。

りんちゃん
りんちゃん

それからUnityの画面に戻りまして、HierarchyでBeamオブジェクトを選択した状態で、先ほど編集したBeamCollisionのファイルをInspectorのAdd Componentの場所にドラッグ&ドロップします。

りんちゃん
りんちゃん

するとBeamオブジェクトのInspectorにBeam CollisionのC#スクリプトが登録されます。これでBeamオブジェクトに当たり判定の設定をつけることができました。

ビームオブジェクトのプレファブ化

りんちゃん
りんちゃん

続いてBeamオブジェクトをプレファブ化します。(プレイヤーがビームボタンを押したら次々にビームを発射できるように、ビームのテンプレートを作るプロセスです。)具体的にはHierarchyにあるBeamオブジェクトをAssetsにドラッグ&ドロップします。

りんちゃん
りんちゃん

プレファブ化ができたら、Hierarchyに存在するBeamオブジェクトについては右クリック→Deleteで消去しましょう。

ビーム発射用設定をしていく

ツクルくん
ツクルくん

それから、ビームを発射するために後はどんな設定がいるのかな?

りんちゃん
りんちゃん

後はプレイヤーに「Bキーを押したらビーム発射をする」設定をしていきます。

りんちゃん
りんちゃん

まずはプレイヤーにビーム発射機能をつけるためのC#スクリプトを作ります。Unity画面下にあるAssetsウインドウの空白で右クリック→Create→Scripting→Empty C# Scriptを選択します。名前はBeamAttackにしましょう。そして内容を次のようにします。

using UnityEngine;

public class BeamAttack : MonoBehaviour
{
    public GameObject beamPrefab; // ビームのプレハブ
    public float beamSpeed = 10f; // ビームの速度

    private SpriteRenderer spriteRenderer; // プレイヤーのスプライトレンダラー

    void Start()
    {
        // プレイヤーのスプライトレンダラーを取得
        spriteRenderer = GetComponent<SpriteRenderer>();
        if (spriteRenderer == null)
        {
            Debug.LogError("SpriteRendererコンポーネントが見つかりません!");
        }
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.B))
        {
            FireBeam();
        }
    }

    void FireBeam()
    {
        // 発射位置を計算 (fireOffsetは1.0で固定)
        Vector2 firePosition;
        if (spriteRenderer.flipX)
        {
            // 左向きの場合
            firePosition = transform.position + Vector3.left * 1.0f; // 1.0fで固定
        }
        else
        {
            // 右向きの場合
            firePosition = transform.position + Vector3.right * 1.0f; // 1.0fで固定
        }

        // ビームを生成
        GameObject beam = Instantiate(beamPrefab, firePosition, Quaternion.identity);

        // ビームに速度を与える
        Rigidbody2D rb = beam.GetComponent<Rigidbody2D>();

        if (spriteRenderer.flipX)
        {
            // 左向きの場合、左向きに発射
            rb.linearVelocity = Vector2.left * beamSpeed;
        }
        else
        {
            // 右向きの場合、右向きに発射
            rb.linearVelocity = Vector2.right * beamSpeed;
        }

        // 一定時間後にビームを破壊 (オプション)
        Destroy(beam, 2f); // 2秒後に破壊
    }
}
りんちゃん
りんちゃん

それからUnityの画面に戻りまして、HierarchyでPlayerオブジェクトを選択した状態で、先ほど編集したBeamAttackのファイルをInspectorのAdd Componentの場所にドラッグ&ドロップします。

りんちゃん
りんちゃん

するとPlayerオブジェクトのInspectorにBeam AttackのC#スクリプトが登録されます。

りんちゃん
りんちゃん

InspectorのBeamAttackの項目にある、Beam Prefabの場所にBeamプレファブをドラッグ&ドロップします。今回はこれで完成です!

それではプレイしてみよう!

ツクルくん
ツクルくん

それではプレイボタンを押して実際にゲームで試してみよう!Bキーを押すと・・・

ツクルくん
ツクルくん

黄色い横棒の形をしたビームが出てるね!やった!

りんちゃん
りんちゃん

そして敵キャラにこのビームを当てると・・・

りんちゃん
りんちゃん

敵が消滅していますね!設定もバッチリです!

終わりに

ツクルくん
ツクルくん

いや〜初心者には新しいことばかりで大変だったなあ・・・

りんちゃん
りんちゃん

今回の作業を通して、Unityの基本的な扱い方についてイメージが湧いたら幸いです。お疲れ様でした!

コメント

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