unity2Dでゲームを作成しております。
<実現したいこと>
ターン制のゲームを作成したいです。
コルーチンを使用して
①まず敵が攻撃する場所を出力(ランダムレンジを使ってます)。
②その後に自分が操作するターンがきてボタンを押してキャラクターを動かす(真ん中、右、左)、
③①で指定した数字の部分に敵の攻撃が開始。
1秒待機後にまた、①〜③の開始をしたいです。
<現状>
敵の攻撃場所の出力と攻撃だけはできたのですが、一度行われた後に繰り返しの処理が行われません。
また、プレイヤーのターンをboolで管理しボタンは押せるようにはなるのですが、押した際にターンを相手に返してあげ、moveメソッドにstringで返した値が移入されず移動がされません。
下記コードです。初心者で説明が拙く、お手数をおかけしますがアドバイスをいただけますと幸いです。
スクリプトはプレイヤーとエネミーに分けております。攻撃に関してのプログラムはすでに完了しており、攻撃は行われるようになっております。
今後①の場所を順番に複数指定して(右左といったように)、②も順番に押していき、所定の順番まで押し終わったら(右左)③攻撃が開始されようにして行きたいと思っているのでアドバイスをいただけますと幸いです。
EnemyManager
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6 7using System; 8 9public class EnemyManager 10{ 11 [SerializeField] 12 PlayerManager playerManager; 13 public Text targetText; 14 15 [NonSerialized] 16 public static bool Oppsiteturn1 = false; 17 18 [NonSerialized] 19 public static bool Oppsiteturn2 = false; 20 21 public int positon2; 22 public string direction2; 23 24 25 void Start() 26 { 27 Oppsiteturn1 = true; 28 fireCoroutine = StartCoroutine(StartFire()); 29 30 } 31 32 void Update() 33 { 34 direction2 = playerManager.direction; 35 36 } 37 38 39 40 41 IEnumerator StartFire() 42 { 43 44 while (Oppsiteturn1) 45 { 46 OnAttack1(); 47 Oppsiteturn1 = false; 48 //ここはtrueにできて移動のボタンはは出てくる 49 PlayerManager.isplayertrun = true; 50 51 } 52 53 54 55 while (Oppsiteturn2) 56 { 57 //ここのログにはfalseと出てくる。 58 Debug.Log(Oppsiteturn2); 59 60 //何も動きませんでした。 61 playerManager.Move(direction2); 62 63 64 OnAttack2(positon2); 65 Oppsiteturn2 = false; 66 67 } 68 69 //これをtrueにすることで繰り返し処理ができると考えたができませんでした。 70 Oppsiteturn1 = true; 71 72 73 74 75 } 76 77 public void OnAttack1() 78 { 79 int position = UnityEngine.Random.Range(0, 3); 80 81 82 switch (position) 83 { 84 case 0: 85 86 87 targetText.text += "真ん中,"; 88 positon2 = position; 89 90 91 92 break; 93 94 case 1: 95 96 targetText.text += "右,"; 97 positon2 = position; 98 99 100 break; 101 case 2: 102 103 104 targetText.text += "左,"; 105 positon2 = position; 106 107 108 break; 109 110 111 } 112 113 114 } 115 116 117 118 public void OnAttack2(int position) 119 { 120 int healElement = UnityEngine.Random.Range(0, 257); 121 122 123 124 switch (position) 125 { 126 case 0: 127 128 Debug.Log("0番目の攻撃"); 129 130 131 break; 132 133 134 case 1: 135 136 Debug.Log("1番目の攻撃"); 137 138 break; 139 140 141 case 2: 142 Debug.Log("2番目の攻撃"); 143 break; 144 145 146 } 147 } 148 149
PlayerManager
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6using System; 7using UnityEngine.SceneManagement; 8 9public class PlayerManager : 10{ 11 [SerializeField] 12 EnemyManager enemyManager; 13 14 [SerializeField] 15 GameObject gameManager; 16 17 GameObject playerCenter, playerRight, playerLeft; 18 19 [NonSerialized] 20 public static bool isplayertrun=false; 21 [SerializeField] 22 GameObject centerbutton,rightbutton,leftbutton; 23 24 25 26 27 28 29 void Update() 30 { 31 //ここの表示と非表示まではうまく行きました。 32 if (isplayertrun) 33 { 34 centerbutton.SetActive(true); 35 leftbutton.SetActive(true); 36 rightbutton.SetActive(true); 37 38 39 } 40 else 41 { 42 centerbutton.SetActive(false); 43 leftbutton.SetActive(false); 44 rightbutton.SetActive(false); 45 } 46} 47 48 49 50 public string OnbuttonCenter() 51 { 52 53 direction = "center"; 54 return direction; 55 } 56 57 //ボタンにアタッチしてます。 58 public void OnButtonCenter() 59 { 60 OnbuttonCenter(); 61 isplayertrun = false; 62 63 //ここがtrueにならずに上述のEnemyManagermのDebug.logではではfalseになってしまいます。 64 EnemyManager.Oppsiteturn2 = true; 65 66 67 } 68 69 public string OnbuttonRight() 70 { 71 72 direction = "right"; 73 return direction; 74 75 76 77 } 78//ボタンにアタッチしてます。 79 public void OnButtonRight() 80 { 81 OnbuttonRight(); 82 isplayertrun = false; 83 EnemyManager.Oppsiteturn2 = true; 84 85 86 } 87 88 89 90 91 public string OnbuttonLeft() 92 { 93 94 direction = "left"; 95 return direction; 96 97 } 98//ボタンにアタッチしてます。 99 public void OnButtonLeft() 100 { 101 OnbuttonLeft(); 102 isplayertrun = false; 103 EnemyManager.Oppsiteturn2 = true; 104 105 106 } 107 108 109//ここもEnemyManagerに上記のOnButtonで選んだstringを代入してあげて動かしてあげたいのですがうまく行きません。 110 111 public void Move(string direction) 112 { 113 114 switch (direction) 115 { 116 case "right": 117 118 activated = 2; 119 120 break; 121 case "left": 122 123 activated = 0; 124 125 break; 126 case "Center": 127 128 activated = 1; 129 130 break; 131 } 132 133 if (activated == 0) 134 { 135 playerLeft.SetActive(true); 136 playerCenter.SetActive(false); 137 playerRight.SetActive(false); 138 139 } 140 else if (activated == 1) 141 { 142 playerLeft.SetActive(false); 143 playerCenter.SetActive(true); 144 playerRight.SetActive(false); 145 146 } 147 else if (activated == 2) 148 { 149 playerLeft.SetActive(false); 150 playerCenter.SetActive(false); 151 playerRight.SetActive(true); 152 } 153 } 154 155 156} 157
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/06 12:24