敵キャラクター&ダメージ処理の作り方

前回までで、プレイヤーキャラクターであるユニティちゃんの基本的な動きができました。次は敵キャラクターを作り、それにユニティちゃんが触れたらダメージを受けるようにしてみましょう。

スポンサーリンク

敵キャラクターの作り方

では、まずは敵キャラクターの作り方です。今回は往復移動するウニの敵キャラだけなのでサクッと作ってしまいましょう。

敵キャラクターのゲームオブジェクトの作成

今回使う敵キャラクターのスプライト画像は「Unitychan2D」→「Sprites」フォルダにある「uni」です。アニメーション用に3枚のスプライトが用意されていますが、あまり違いがないのでここではアニメーションさせずに1枚だけ使います。

好きなスプライトを1枚選んだら、それをヒエラルキーにドラッグ&ドロップしてゲームオブジェクトを作りましょう。できたら「タグ」と「レイヤー」をそれぞれ「Enemy」に変更しておいてください(※ない場合はプロジェクト設定で新しいタグやレイヤーを追加してください)。

必要なコンポーネントのアタッチ

これで敵のゲームオブジェクトができたので、必要なコンポーネントをアタッチします。下の図のように「2Dボックスコライダー」コンポーネントと、「くろくま基本アセット」に含まれるC#スクリプト「ReciprocatingObstacle」をアタッチしてください。

敵キャラクターのコンポーネント

ReciprocatingObstacleは、ゲームオブジェクトを直線的に往復移動させるためのC#スクリプトです。パラーメーターは次のようになっています。

  • Wait Time:端まで移動したときの停止時間
  • X移動、Y移動、Z移動:移動距離
  • 速度:移動速度

この辺は必要に応じて変えればOKです。

アタッチできたらゲームオブジェクトをプレハブ化しておきましょう。これで敵キャラクターができました。

ダメージ処理の作り方

そうしたら、次はユニティちゃんが敵に触れた時のダメージ処理を追加します。「PlayerController」スクリプトを次のように書き換えてください(※変更部分以外は省略してあります)。

//省略

protected override void Damage()
{
  //既にダメージ状態(=無敵時間中)なら終了
  if (damage)
  {
    return;
  }

  //ヒットポイントを-1
  //Hpプロパティにより、HPが0になると自動的にDead()が呼ばれる(※BaseCharacterController参照)
  Hp--;

  if(Hp > 0)
  {
    StartCoroutine("DamageTimer");
  }
}

//追加
//ダメージを受けた瞬間の無敵時間のタイマー
protected IEnumerator DamageTimer()
{
  //既にダメージ状態なら終了
  if (damage)
  {
    yield break;
  }

  damage = true;

  animator.SetTrigger("Damage");

  //無敵時間中の点滅
  for (int i = 0; i < 10; i++)
  {
    spriteRenderer.enabled = false;
    yield return new WaitForSeconds(0.05f);

    spriteRenderer.enabled = true;
    yield return new WaitForSeconds(0.05f);
  }

  damage = false;
}

//追加
//敵に触れたらダメージ
protected void OnCollisionEnter2D(Collision2D collision)
{
  if (collision.gameObject.CompareTag("Enemy"))
  {
    Damage();
  }
}

//省略

変更点の説明

Damageメソッド

呼び出されるとHPを1減らします。HPが0なら自動的にDeadメソッドが呼ばれますが、1より大きければ後述のDamageTimerを実行します。

DamageTimerコルーチン

ダメージを受けた時、連続でダメージを受け続けないように無敵時間を設けるためのコルーチンです。一定時間の間だけ「ダメージを受けないフラグ」をONにします。

また、見た目が変わらないと無敵時間中であることがプレイヤーに伝わらないので、スプライトのON/OFFを0.05秒ごとに切り替えて点滅させる処理も行います。

OnCollisionEnter2Dメソッド

ユニティちゃんのコライダーが他のコライダーに衝突した瞬間に呼ばれます。相手のゲームオブジェクトのタグを見て、「Enemy」ならダメージ処理を呼び出します。

ダメージ動作の確認

実際にウニに当たってみて、下の動画のようになっていれば成功です(※事前にユニティちゃんのHPを適当に増やしておきましょう)。

ユニティちゃんへのダメージ処理

(動いていない場合はクリックで再生)


次のページ→準備中…