🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

4918閲覧

Unityでターン制のコマンド2DRPGを作っています。

gemfighter

総合スコア38

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/11/09 13:26

編集2019/11/13 12:53

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は敵の数が多いため、それぞれを引数に入れるとコードが長くなってしまうため、どのように書けばいいかわからなくなってしましました。
あと、キャラクターのステータスの設定の仕方も一応書いてあるもので動きますが、こっちのほうがいいというものや、おすすめの参考本があれば教えて呉れれば幸いです。
他の情報が欲しい場合は追記します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k1000

2019/11/12 08:29

RPGタグはこの件とは無関係なホモニムなので、削除していただければと存じます。
guest

回答2

0

このような大量のデータは外部ファイルに持たせるのが一般的です
楽なのはエクセルで入力し、csvファイルとして書き出しそれを読み込む感じですね

投稿2019/11/10 06:35

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

最近ではデータベースで管理しておくのが一般的ですが、
敵のステータスを調整するための専用のツールを作ってもいいかも知れませんね。

技術力がないのなら、access等を使うと管理が楽になりますよ。

投稿2019/11/20 08:46

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問