レベル・力・健康のパラメーターはゴブリン固有ではなく、敵キャラクターみんなが持っているものと考えていいでしょうか?
そうでしたら、単純にこれらパラメーターを敵クラス側に持たせればいいんじゃないかと思います。
敵クラスがレベル・力・健康プロパティを持っていて、それらから最大HPを算出する機能も持っていて...
C#
1using UnityEngine;
2
3public abstract class Enemy
4{
5 private int level;
6 private int strength;
7 private int health;
8 private int hp;
9
10 protected Enemy(int level, int strength, int health)
11 {
12 this.Level = level;
13 this.Strength = strength;
14 this.Health = health;
15 this.Hp = this.MaximumHp;
16 }
17
18 public int Level
19 {
20 get => this.level;
21 protected set => this.level = Mathf.Clamp(value, 0, 99);
22 }
23
24 public int Strength
25 {
26 get => this.strength;
27 protected set => this.strength = Mathf.Clamp(value, 0, 99);
28 }
29
30 public int Health
31 {
32 get => this.health;
33 protected set => this.health = Mathf.Clamp(value, 0, 99);
34 }
35
36 public int Hp
37 {
38 get => this.hp;
39 protected set => this.hp = Mathf.Clamp(value, 0, this.MaximumHp);
40 }
41
42 public int MaximumHp => this.Strength + (this.Level * this.Health);
43}
ゴブリンは特定のレベル・力・健康の値を固定的に持っていると仮定すると、それをたとえばコンストラクタで与えてやれば...
C#
1using UnityEngine;
2
3public class Goblin : Enemy
4{
5 public Goblin() : base(level: 4,
6 strength: 3,
7 health: 5)
8 {
9 }
10
11 public void AddHp(int value)
12 {
13 var prevHp = this.Hp;
14 this.Hp += value;
15 Debug.Log($"{prevHp} -> {this.Hp}");
16 }
17
18 public void PrintHp()
19 {
20 Debug.Log($"{this.GetType().Name}{this.GetHashCode()}:{this.Hp}/{this.MaximumHp}");
21 }
22}
ゴブリンはそれらから算出された最大HPを持つ敵キャラクターとして振る舞うと思います。
C#
1using UnityEngine;
2
3public class InheritanceTest : MonoBehaviour
4{
5 private void Start()
6 {
7 var goblin = new Goblin();
8 Debug.Log($"Level:{goblin.Level}, Strength:{goblin.Strength}, Health:{goblin.Health}, MaximumHp:{goblin.MaximumHp}");
9 while (goblin.Hp > 0)
10 {
11 goblin.AddHp(-7);
12 goblin.PrintHp();
13 }
14 }
15}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/09 16:32
2019/06/09 21:06
2019/06/10 19:53
2019/06/10 21:45