『Unity チュートリアル』「2Dシューティング」 学習記録2

unity3d.com

序文

Unityチュートリアル「2Dシューティング」2日目。

はやくUnityアプリ作りたいなーと思いつつ、冷静に考えてみるとなかなか時間がとれそうにない…。
いつか触れるその日のためにインプット…

GitHub

github.com

進捗

  • ゲーム制作編
    • 敵を作成しよう
    • 当たり判定とアニメーションイベントとレイヤー

(学習時間:2.5時間)

コード実装部分

\2d-shooting-game\assets\scripts\enemy.cs

using System.Collections;
using UnityEngine;

public class Enemy : MonoBehaviour
{
  // Spaceshipコンポーネント
  Spaceship spaceship;

  IEnumerator Start()
  {
    // Spaceshipコンポーネントを取得
    spaceship = GetComponent<Spaceship>();

    // ローカル座標のY軸のマイナス方向に移動する
    spaceship.Move(transform.up * -1);

    // canShotがfalseの場合、コルーチンを終了させる
    if(spaceship.canShot == false)
    {
      yield break;
    }

    while (true)
    {
      // 子要素を全て取得する
      for(int i = 0; i < transform.childCount; i++)
      {
        Transform shotPosition = transform.GetChild(i);

        // ShotPositionの位置/角度で弾を撃つ
        spaceship.Shot(shotPosition);
      }

      // shotDelay秒待つ
      yield return new WaitForSeconds(spaceship.shotDelay);
    }
  }

  private void OnTriggerEnter2D(Collider2D c)
  {
    // レイヤー名を取得
    string layerName = LayerMask.LayerToName(c.gameObject.layer);

    // レイヤー名がBullet(Player)以外の時は何も行わない
    if (layerName != "Bullet (Player)") return;

    // 弾の削除
    Destroy(c.gameObject);

    // 爆発
    spaceship.Explosion();

    // エネミーの削除
    Destroy(gameObject);
  }
}
  • その他実装部分

github.com

実行結果

www.youtube.com

感想

今日は敵キャラクターを実装して、当たり判定もつける。

見出しと画像の間の目立たない一行に超重要なことが書いてあったりして油断ならない(笑)
挑戦する人は細心の注意を払って読み進めていかれることをおすすめします。

EnemyオブジェクトとPlayerオブジェクトの共通部分をSapceshipクラスに切り出すとか、チュートリアルとはいえ、やっぱりある程度オブジェクト指向の経験がないと難しいかもね。

if(spaceship.canShot == false)

みたいな記法にチュートリアルを書いた人の優しさを感じます。

カロリーメイトください。

BGM

?LDK / Hi, how are you?

www.youtube.com