ビーム攻撃機能が欲しい・・・
このサンプルゲームでは敵を倒す方法はジャンプして踏みつけるしかないけど、それだと真横に敵がいたら対処しにくいなあ・・・
それではプログラミングの勉強も兼ねて、真横に発射できるビーム攻撃機能を実装してみましょう!
ビームオブジェクトの作成(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の基本的な扱い方についてイメージが湧いたら幸いです。お疲れ様でした!
コメント