カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

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

unity3d.com

序文

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

昨日は親戚の子が東京に来ていたので付き合っていました。
その後、その子の忘れ物を豊洲ららぽーとまでとりにいかされていました。ちかれた…。

GitHub

github.com

進捗

  • ゲーム制作編
    • エネミーのHP、弾の攻撃力、アニメーションの追加

(学習時間:2時間)

コード実装部分

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

using System.Collections;
using UnityEngine;

public class Enemy : MonoBehaviour
{
  // ヒットポイント
  public int hp = 1;

  // Spaceshipコンポーネント
  Spaceship spaceship;

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

    // ローカル座標のY軸のマイナス方向に移動する
    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);
    }
  }

  // 機体の移動
  public void Move(Vector2 direction)
  {
    GetComponent<Rigidbody2D>().velocity = direction * spaceship.speed;
  }

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

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

    // PlayerBulletのTransformを取得
    Transform playerBulletTransform = c.transform.parent;

    // Bulletコンポーネントを取得
    Bullet bullet = playerBulletTransform.GetComponent<Bullet>();

    // ヒットポイントを減らす
    hp = hp - bullet.power;

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

    // ヒットポイントが0以下であれば
    if (hp <= 0)
    {
      // 爆発
      spaceship.Explosion();

      // エネミーの削除
      Destroy(gameObject);
    }
    else
    {
      spaceship.GetAnimator().SetTrigger("Damage");
    }
  }
}
  • その他実装部分

github.com

実行結果

www.youtube.com

感想

今日は敵のHP設定と、プレイヤーに無敵時間の設定、エネミーのダメージ時のアニメーション設定など。
enemy.csのソースコードに一部誤植があった気がする。

ここらへん

    // Bulletコンポーネントを取得
    Bullet bullet = playerBulletTransform.GetComponent<Bullet>();

だんだん内容が高度になってきて、正直ついていくだけで精一杯。
特にアニメーション関連の部分は正しく動かすことだけで精一杯で、まったく理解できている気がしない。

AnimationウィンドウやらAnimatorウィンドウの操作方法はさっぱりわからない。
ここらへんは初心者向けの参考書でも割とスルーされてる気がするので、がっつり勉強しなきゃなと思っている。
なんかいい参考書ないですかね。

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

BGM

TOKYO!!! / Bakyun the everyday

www.youtube.com