現在UnityでアクションRPGゲームを作成しているのですが攻撃の実装方法に悩んでいます。
プレイヤーの持っている武器にColliderを設定してOntriggerEnter2Dで接触判定を取り、IDamageableインターフェースを継承したオブジェクトならばDamageメソッドを呼びだしてそれぞれのダメージ処理を行うというようにしているのですが、攻撃には属性があり、こんぼうなら打撃、剣なら斬撃、炎属性の剣なら炎と斬撃を持っていたとして、攻撃を受けたオブジェクトは受けた攻撃の属性によってそれぞれ違う処理を行うようにしたいと思いこのように作ってみたのですが
攻撃の属性
C#
1public enum Type{ 打撃, 斬撃, 炎, 毒 } 2
インターフェース
C#
1public interface IDamageable 2{ 3 void Damage(float power, List<Type> types); 4}
装備している武器
C#
1public class Weapon : MonoBehaviour 2{ 3 public float weaponpower; 4 5 //攻撃中だけ武器のColliderが有効になる 6 void OnTriggerEnter2D(Collider2D Hitcollider) 7 { 8 //当たったオブジェクトがIDamageableを継承したオブジェクトなら 9 if (Hitcollider.GetComponent<IDamageable>() != null) 10 { 11 //炎属性の剣の場合 12 List<Type> types = new List<Type> { Type.斬撃, Type.炎, }; 13 14 Hitcollider.GetComponent<IDamageable>().Damage(weaponpower, types); 15 } 16 } 17} 18
ダメージを受けるオブジェクト
C#
1//敵 2public class Enemy : MonoBehaviour, IDamageable 3{ 4 public void Damage(float power, List<Type> types) 5 { 6 for (int i = 0; i < types.Count; i++) 7 { 8 switch (types[i]) 9 { 10 case Type.炎: 11 //炎のダメージをうけたら燃える 12 break; 13 case Type.毒: 14 //毒のダメージをうけたら毒状態になる 15 break; 16 case Type.斬撃: 17 case Type.打撃: 18 //斬撃、打撃はHPを減らす 19 //HP-=power; 20 break; 21 } 22 } 23 } 24}
C#
1//木箱 2public class Kibako : MonoBehaviour, IDamageable 3{ 4 public void Damage(float power, List<Type> types) 5 { 6 for (int i = 0; i < types.Count; i++) 7 { 8 switch (types[i]) 9 { 10 case Type.炎: 11 //炎のダメージをうけたら燃える 12 break; 13 case Type.斬撃: 14 case Type.打撃: 15 //斬撃、打撃ならバラバラになる 16 break; 17 } 18 } 19 } 20}
この処理の仕方は正しいでしょうか?
独学で勉強して作っているので何が正しくて間違いなのかわかりません。この処理の仕方が正しいのかどうか考えれば考えるほどわからなくなってしまいます。
追記しました
遅くなりすみません。自分のやりたかった通りに動きはしたのですがしばらくしてからもう一度自分の書いたコードを見てみるともっと他に良いやり方があるんじゃないかと考えてしまい何度もコードを書き直しては考え書き直しては考えを繰り返して最終的に結局最初と同じようなコードになったりして全く先に進めません。
今回自分が書いた、相手にダメージを与えて攻撃対象(モンスターや木箱)によって処理を変えて、攻撃に使用した武器に設定されている属性によっても処理を変えたい場合のコードの書き方が今回のやり方で問題はないのかというところで悩んでおり、もっと良いやり方があるとかそのやり方はまずいなどの回答をもらえるとありがたいです。
回答2件
あなたの回答
tips
プレビュー