前提
現在、プレイヤーが武器を複数持っている場合の敵へのダメージ処理に困っています。
というのも処理自体は完成しているのですがもっといい書き方があるんじゃないかと思い質問するに至りました。
概要
Weponというスクリプトに武器のタイプとダメージを与えるインターフェースを持たせています。
次に、武器のコライダーに敵が当たるとダメージを与えるインターフェースを継承しているか検知しダメージを与える処理をしています。
その次が問題で、敵にダメージ計算の処理をさせているのですがこの方法だと敵や武器を増やすごとに多くの記述が必要になるので少ないものにしたいです。
該当のソースコード
public class Weapon : MonoBehaviour { //武器&スキルタイプ public enum Type { Firesword, IceSword, FireSkill}; //ダメージを与えられるインターフェース public interface IDamageable { void Damage(int Damage, List<Type> types); } }
//持っている武器スクリプト public class FireSword : MonoBehaviour { public int fireswordDamage; //敵に当たった時 private void OnTriggerEnter(Collider col) { //当たったオブジェクトがIDamageableを継承したオブジェクトなら if (col.GetComponent<IDamageable>() != null) { //炎属性の剣の場合 List<Type> types = new List<Type> { Type.Firesword }; col.GetComponent<IDamageable>().Damage(fireswordDamage, types); } } }
//敵へのダメージ処理 public void Damage(int Damage, List<Type> types) { for (int i = 0; i < types.Count; i++) { switch (types[i]) { case Type.Firesword: //炎の剣なら SkeletonHP = SkeletonMaxHP - Damage; SkeletonMaxHP = SkeletonHP; ViewDamage(Damage); break; case Type.IceSword: //氷の剣なら SkeletonHP = SkeletonMaxHP - (Damage * 2); SkeletonMaxHP = SkeletonHP; ViewDamage(Damage * 2); break; case Type.FireSkill: //炎スキルなら SkeletonHP = SkeletonMaxHP - Damage; SkeletonMaxHP = SkeletonHP; ViewDamage(Damage); break; } } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。