2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

敵(障害物)を追加する

Last updated at Posted at 2018-04-27

概要

前回の記事のプロジェクトをベースに敵を追加します。
次回以降にプレイヤーのライフゲージを作成するため、簡単なダメージ処理も同時に追加します。

Enemy.gif

この環境で追加した内容を以下の通りです。

  • 敵(障害物)オブジェクトの追加
  • 敵との接触時にプレイヤーのライフを減算する処理
  • 敵との接触時にプレイヤーを後方に弾く処理
  • 敵との接触時にプレイヤーを白く点滅させ被弾状況を知らせる処理

手順

  1. 空のゲームオブジェクト(Enemy)を追加
  2. Enemy配下にCubeオブジェクト(EnemyObject)を追加
  3. EnemyObjectのRotation、Scaleを変更する
1. EnemyObjectにマテリアルを追加し赤色に変更する 1. EnemyObjectにスクリプトを追加する

ソースコード

Enemy.cs
public class Enemy : MonoBehaviour
{
	void Update ()
	{
		// 親オブジェクトを取得してY軸回転させる
		GameObject parent = transform.root.gameObject;
		parent.transform.Rotate (new Vector3 (0, 45, 0) * Time.deltaTime);
	}

	void OnTriggerEnter (Collider other)
	{
		// プレイヤーだった場合、ダメージ処理を呼び出す
		if (other.gameObject.CompareTag ("Player"))
		{
			Player player = other.gameObject.GetComponent<Player> ();
			player.TakeDamage (10);
		}
	}
}
Player.cs
public class Player : MonoBehaviour
{
	// 変更がない箇所は省略
	
	Renderer m_Renderer;

	int hp = 100;				// ライフ

	void Awake ()
	{
		m_Renderer = GetComponentInChildren<Renderer> ();
	}

	public void TakeDamage (int damage)
	{
		// ライフ減算
		hp -= damage;

		// プレイヤーの進行方向とは逆に弾く処理
		// 仮の値なので反発係数はマジックナンバーとして許容する
		m_Rigidbody.AddForce (transform.forward * -60f, ForceMode.Impulse);

		// 点滅によるダメージ演出
		StartCoroutine (Blink ());
	}

	private IEnumerator Blink ()
	{
		// 変更前のマテリアルのコピーを保存
		var original = new Material (m_Renderer.material);

		// キーワードの有効化する
		m_Renderer.material.EnableKeyword ("_EMISSION");

		// 白色に光らせる
		m_Renderer.material.SetColor ("_EmissionColor", new Color (1, 1, 1));

		// 0.1秒待機して元の色に戻す
		yield return new WaitForSeconds (0.1f);
		m_Renderer.material = original;
	}
}

まとめ

0.1秒後にプレイヤーの色を白から元の色に戻す処理でコルーチンを使用しています。
Java(≒Android)では標準で用意されていないので、初めて使用しましたが本当に便利ですね。

今回は実装に至っていませんが、以下の拡張の余地を残しています。

  • 敵(障害物)オブジェクトの移動処理
  • 敵の自動ポップ処理
  • 敵の攻撃処理

ソースコードはGitHubにアップロードしています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?