C#
1public class BattleCaracter : MonoBehaviour 2{ 3 const int D1 = 2;//定数1 4 const int D2 = 4;//定数2 5 6 const int H = 2;//補数 7 8 //攻撃メソッド 9 public static int Attack(int AT,int R_HP, int R_DF)//仮 10 { 11 int Ans; 12 13 Ans = R_HP - (AT * D1 - R_DF * D2)*H; 14 15 return Ans; 16 } 17} 18 19public class BattleSequence : MonoBehaviour 20{ 21 const int PM = 4;//プレイヤー人数 22 int cmd = 0;//コマンド変数 23 bool selectcmd = true;//コマンド選択フラグ 24 25 // Start is called before the first frame update 26 void Start() 27 { 28 cmd = 0; 29 selectcmd = true; 30 31 32 } 33 34 // Update is called once per frame 35 void Update() 36 { 37 38 if (selectcmd == true) 39 { 40 if (Input.GetKey(KeyCode.DownArrow)) 41 { 42 cmd += 1; 43 44 if (cmd >= 5) 45 { 46 cmd = 0; 47 } 48 print(cmd); 49 } 50 51 if (Input.GetKey(KeyCode.UpArrow)) 52 { 53 cmd -= 1; 54 55 if (cmd <= 0) 56 { 57 cmd = 5; 58 } 59 print(cmd); 60 } 61 62 if (Input.GetKey(KeyCode.Return)) 63 { 64 selectcmd = false; 65 } 66 } 67 else 68 { 69 //行動の順番 70 if (MoveController.Player[0].SPEED >= MoveController.Teki[0].SPEED) 71 { 72 73 switch (cmd) 74 { 75 //攻撃選んだ時 76 case 1: 77 MoveController.Teki[0].HP = BattleCaracter.Attack(MoveController.Player[0].ATTACK, MoveController.Teki[0].HP, MoveController.Teki[0].DEFENCE); 78 MoveController.Player[0].HP = BattleCaracter.Attack(MoveController.Teki[0].ATTACK, MoveController.Player[0].HP, MoveController.Player[0].DEFENCE); 79 print(MoveController.Player[0].HP); 80 print(MoveController.Teki[0].HP); 81 break; 82 //魔法選んだ時 83 case 2: 84 break; 85 //特技選んだ時 86 case 3: 87 break; 88 //逃げる選んだ時 89 case 4: 90 break; 91 //防御選んだ時 92 case 5: 93 break; 94 //アイテム選んだ時 95 case 6: 96 break; 97 98 } 99 } 100 else 101 { 102 switch (cmd) 103 { 104 //攻撃選んだ時 105 case 1: 106 MoveController.Player[0].HP = BattleCaracter.Attack(MoveController.Teki[0].ATTACK, MoveController.Player[0].HP, MoveController.Player[0].DEFENCE); 107 MoveController.Teki[0].HP = BattleCaracter.Attack(MoveController.Player[0].ATTACK, MoveController.Teki[0].HP, MoveController.Teki[0].DEFENCE); 108 print(MoveController.Teki[0].HP); 109 print(MoveController.Player[0].HP); 110 break; 111 //魔法選んだ時 112 case 2: 113 break; 114 //特技選んだ時 115 case 3: 116 break; 117 } 118 } 119 } 120 } 121} 122 123public abstract class Status 124{ 125 public string Name { get; protected set; } //名前 126 public int HP { get; set; } //体力 127 public int Max_HP { get; protected set; } //体力最大値 128 public int MP { get; set; } //マジックポイント 129 public int Max_MP { get; protected set; } //マジックポイント最大値 130 public int ATTACK { get; protected set; } //攻撃力 131 public int DEFENCE { get; protected set; } //防御力 132 public int SPIRIT { get; protected set; } //精神力 133 public int SPEED { get; protected set; } //素早さ 134 135 136 137} 138 139public class Chara : Status 140{ 141 //こんすとらくた 142 public Chara(string name, int hp, int mp, int at, int df, int sp, int spd) 143 { 144 Name = name; 145 HP = hp; 146 Max_HP = HP; 147 MP = mp; 148 Max_MP = MP; 149 ATTACK = at; 150 DEFENCE = df; 151 SPIRIT = sp; 152 SPEED = spd; 153 } 154} 155 156別のクラス{ 157//インスタンス 158 Player[0] = new Chara("****", 100, 15, 15, 15, 10, 5); 159 Player[1] = new Chara("****", 120, 20, 15, 10, 20, 10); 160 Player[2] = new Chara("****", 100, 10, 10, 10, 10, 15); 161 Player[3] = new Chara("****", 90, 30, 0, 5, 30, 5); 162 163 for (int i = 0; i < 4; i++) { 164 Teki[i] = new Chara("てき", 10, 4, 1, 1, 10, 5); 165 } 166}
今、Unityでコマンドバトル形式(ターン制)のRPGを作っています。
そこで、攻撃のメソッドの作り方が分からなくなりました。
どのようにして敵のステータスを引数なしで入れているか分かりません。
今は敵それぞれに引数を用意していますが、RPGは敵の数が多いため、それぞれを引数に入れるとコードが長くなってしまうため、どのように書けばいいかわからなくなってしましました。
あと、キャラクターのステータスの設定の仕方も一応書いてあるもので動きますが、こっちのほうがいいというものや、おすすめの参考本があれば教えて呉れれば幸いです。
他の情報が欲しい場合は追記します。
回答2件
あなたの回答
tips
プレビュー