敵ロボットにHPをつける
![7cd7a88d e1a0 40f4 a13e 2ae0106d2e90](https://codegenius.org/uploads/slide/image/7846/7cd7a88d-e1a0-40f4-a13e-2ae0106d2e90.jpeg)
敵のスーパークラスの作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// ★「abstract」キーワードを追加すると「抽象クラス」になる(ポイント)
public abstract class EnemyBase : MonoBehaviour
{
public int HP;
// ★「virtual」キーワードを追加すると、メソッドを「オーバーライド」できるようになる(ポイント)
public virtual void TakeDamage(int attackPower)
{
HP -= attackPower;
if(HP < 1)
{
Destroy(gameObject);
}
}
}
![Defeb179 becd 45e6 8747 b16215a3d2e7](https://codegenius.org/uploads/slide/image/7847/defeb179-becd-45e6-8747-b16215a3d2e7.jpeg)
![E8014ddd d7e7 4533 9eaa 5d68243c8a43](https://codegenius.org/uploads/slide/image/7848/e8014ddd-d7e7-4533-9eaa-5d68243c8a43.jpeg)
敵のサブクラスの作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBot_A : EnemyBase // 変更(ポイント)
{
private void Start()
{
// EnemyBaseを「継承」しているので、そこで定義されている「HP」変数を使うことができる。
HP = 1;
}
}
![0875e435 f2ce 4bd4 aec3 2767f5d64595](https://codegenius.org/uploads/slide/image/7849/0875e435-f2ce-4bd4-aec3-2767f5d64595.jpeg)
![9d87ab58 6be9 414f a792 8d3fed1f0f75](https://codegenius.org/uploads/slide/image/7850/9d87ab58-6be9-414f-a792-8d3fed1f0f75.jpeg)
![D6bc9868 bc41 4ea7 8d51 0b69fc26b19c](https://codegenius.org/uploads/slide/image/7851/d6bc9868-bc41-4ea7-8d51-0b69fc26b19c.jpeg)
![246fc1d0 ff24 45ec 8071 c0df2d9c1594](https://codegenius.org/uploads/slide/image/7852/246fc1d0-ff24-45ec-8071-c0df2d9c1594.jpeg)
![4debe898 ed93 4e5e 86a0 2f88ffd3d7bd](https://codegenius.org/uploads/slide/image/7853/4debe898-ed93-4e5e-86a0-2f88ffd3d7bd.jpeg)
![7ec82eb7 dcb3 4b51 977b 087b64379ee5](https://codegenius.org/uploads/slide/image/7854/7ec82eb7-dcb3-4b51-977b-087b64379ee5.jpeg)
敵にダメージを与える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shell : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip sound;
private void OnTriggerEnter(Collider other)
{
// ★テクニック
// TryGetComponentはoutの後ろで指定したコンポーネント(スクリプト)を持っているか否かを判定できる。
// 「クラス継承」の場合、「スーパークラス」まで辿ることができる。
// (条件)もしも、砲弾にぶつかった相手方がEnemyBaseを持っているならば・・・
if (other.TryGetComponent(out EnemyBase enemy))
{
// TakeDamage()メソッドを呼び出す。
// 「1」はこの砲弾の攻撃力
enemy.TakeDamage(1);
// 砲弾を破壊する。
Destroy(gameObject);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 1.0f);
AudioSource.PlayClipAtPoint(sound, transform.position);
}
}
}
![932861b8 7c57 4fde ae2a 2eb4c0638b5b](https://codegenius.org/uploads/slide/image/7855/932861b8-7c57-4fde-ae2a-2eb4c0638b5b.jpeg)
![194f6867 7c95 4b19 b46c eed66fcb6ebd](https://codegenius.org/uploads/slide/image/7856/194f6867-7c95-4b19-b46c-eed66fcb6ebd.jpeg)
![7cd7a88d e1a0 40f4 a13e 2ae0106d2e90](https://codegenius.org/uploads/slide/image/7846/7cd7a88d-e1a0-40f4-a13e-2ae0106d2e90.jpeg)
敵のスーパークラスの作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// ★「abstract」キーワードを追加すると「抽象クラス」になる(ポイント)
public abstract class EnemyBase : MonoBehaviour
{
public int HP;
// ★「virtual」キーワードを追加すると、メソッドを「オーバーライド」できるようになる(ポイント)
public virtual void TakeDamage(int attackPower)
{
HP -= attackPower;
if(HP < 1)
{
Destroy(gameObject);
}
}
}
![Defeb179 becd 45e6 8747 b16215a3d2e7](https://codegenius.org/uploads/slide/image/7847/defeb179-becd-45e6-8747-b16215a3d2e7.jpeg)
![E8014ddd d7e7 4533 9eaa 5d68243c8a43](https://codegenius.org/uploads/slide/image/7848/e8014ddd-d7e7-4533-9eaa-5d68243c8a43.jpeg)
敵のサブクラスの作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBot_A : EnemyBase // 変更(ポイント)
{
private void Start()
{
// EnemyBaseを「継承」しているので、そこで定義されている「HP」変数を使うことができる。
HP = 1;
}
}
![0875e435 f2ce 4bd4 aec3 2767f5d64595](https://codegenius.org/uploads/slide/image/7849/0875e435-f2ce-4bd4-aec3-2767f5d64595.jpeg)
![9d87ab58 6be9 414f a792 8d3fed1f0f75](https://codegenius.org/uploads/slide/image/7850/9d87ab58-6be9-414f-a792-8d3fed1f0f75.jpeg)
![D6bc9868 bc41 4ea7 8d51 0b69fc26b19c](https://codegenius.org/uploads/slide/image/7851/d6bc9868-bc41-4ea7-8d51-0b69fc26b19c.jpeg)
![246fc1d0 ff24 45ec 8071 c0df2d9c1594](https://codegenius.org/uploads/slide/image/7852/246fc1d0-ff24-45ec-8071-c0df2d9c1594.jpeg)
![4debe898 ed93 4e5e 86a0 2f88ffd3d7bd](https://codegenius.org/uploads/slide/image/7853/4debe898-ed93-4e5e-86a0-2f88ffd3d7bd.jpeg)
![7ec82eb7 dcb3 4b51 977b 087b64379ee5](https://codegenius.org/uploads/slide/image/7854/7ec82eb7-dcb3-4b51-977b-087b64379ee5.jpeg)
敵にダメージを与える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shell : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip sound;
private void OnTriggerEnter(Collider other)
{
// ★テクニック
// TryGetComponentはoutの後ろで指定したコンポーネント(スクリプト)を持っているか否かを判定できる。
// 「クラス継承」の場合、「スーパークラス」まで辿ることができる。
// (条件)もしも、砲弾にぶつかった相手方がEnemyBaseを持っているならば・・・
if (other.TryGetComponent(out EnemyBase enemy))
{
// TakeDamage()メソッドを呼び出す。
// 「1」はこの砲弾の攻撃力
enemy.TakeDamage(1);
// 砲弾を破壊する。
Destroy(gameObject);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 1.0f);
AudioSource.PlayClipAtPoint(sound, transform.position);
}
}
}
![932861b8 7c57 4fde ae2a 2eb4c0638b5b](https://codegenius.org/uploads/slide/image/7855/932861b8-7c57-4fde-ae2a-2eb4c0638b5b.jpeg)
![194f6867 7c95 4b19 b46c eed66fcb6ebd](https://codegenius.org/uploads/slide/image/7856/194f6867-7c95-4b19-b46c-eed66fcb6ebd.jpeg)
敵ロボットにHPをつける