現状
魔法の書に触れると魔法修得リストに追加、ボタン押すと切り替え
モンスター側タグによってダメージ変更
実現したいこと
現状だと魔法が増えると目的の魔法を使うために何回も押さないといけないので魔法セット画面でキャンバスのボタンを押すことで魔法を3つほどセットしたいと思っているのですがボタン押した時に3つまでをどういう風にリストに追加していけばいいのか分からずに進まなくなってしまいました
モンスター側もこのままタグで管理するよりかいい方法があるのではないかなと迷ってしまっています
現状でも動作は問題ないのですがきれいにまとめれるようになりたいので参考程度でいいので考え方などを教えて頂きたいなと思っています
コード
unity
1プレイヤーコード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class Player : MonoBehaviour 8{ 9 // 10 public float moveSpeed; 11 private Vector3 velocity; 12 public Joystick joystick; 13 public Animator animator; 14 public Image Aboid; 15 public float avoidtime = 5; 16 public float invincible = 2; 17 public float deltainvincible = 0; 18 19 // 20 public float span = 2; 21 public float delta = 0; 22/////////////////////魔法部分///////////////////////////// 23 private GameObject Magic; 24 private GameObject nearObj; 25 public List<string> magic = new List<string>(); 26 public int i; 27////////////////////////////////////////////////////// 28 29 // 30 int maxHp = 100; 31 int currentHp; 32 int maxMana = 100; 33 int currentMana; 34 public Slider hpslider; 35 public Slider manaslider; 36 37 void Start() 38 { 39 animator = this.gameObject.GetComponent<Animator>();// 40/////////////////////魔法部分///////////////////////////// 41 magic.Add("Magic/NomalBall"); 42 i = 0; 43 Magic = (GameObject)Resources.Load(magic[i]);// 44///////////////////////////////////////////////////////// 45 hpslider.value = 1; 46 currentHp = maxHp; 47 manaslider.value = 1; 48 currentMana = maxMana; 49 } 50 51 void Update() 52 { 53 54 //joy stickの動き 55 Vector3 moveVector = (Vector3.right * joystick.Horizontal + Vector3.forward * joystick.Vertical); 56 57 //WASDの動き 58 velocity = Vector3.zero; 59 if (Input.GetKey(KeyCode.W)) 60 velocity.z += 1; 61 if (Input.GetKey(KeyCode.A)) 62 velocity.x -= 1; 63 if (Input.GetKey(KeyCode.S)) 64 velocity.z -= 1; 65 if (Input.GetKey(KeyCode.D)) 66 velocity.x += 1; 67 // 68 if (Input.GetKey(KeyCode.Space)) 69 OnAvoid(); 70 // 71 if (Input.GetKey(KeyCode.C)) 72 OnChangeMagic(); 73 74 if (moveVector != Vector3.zero) 75 { 76 //ここはキャラのアニメ遷移 77 animator.SetBool("Run", true); 78 79 //transformのrotationに入れる。 80 transform.rotation = Quaternion.LookRotation(moveVector); 81 82 //移動…movespeedは移動速度のパラメータ。 83 transform.Translate(moveVector * moveSpeed * Time.deltaTime, Space.World); 84 85 // 86 if (deltainvincible <= 2) 87 { 88 deltainvincible += Time.deltaTime;//時間経過 89 } 90 if (this.deltainvincible > this.invincible) 91 { 92 EndAvoid(); 93 } 94 95 if (currentMana <= 99) 96 { 97 currentMana += 1; 98 } 99 delta = 2; 100 nearObj = null; 101 } 102 else if (velocity.magnitude > 0) 103 { 104 //ここはキャラのアニメ遷移 105 animator.SetBool("Run", true); 106 107 //transformのrotationに入れる。 108 transform.rotation = Quaternion.LookRotation(velocity); 109 110 velocity = velocity.normalized * moveSpeed * Time.deltaTime; 111 112 // プレイヤーの位置(transform.position)の更新 113 transform.position += velocity; 114 115 // 116 if (deltainvincible <= 2) 117 { 118 deltainvincible += Time.deltaTime;//時間経過 119 } 120 if (this.deltainvincible > this.invincible) 121 { 122 EndAvoid(); 123 } 124 125 if (currentMana <= 99) 126 { 127 currentMana += 1; 128 } 129 delta = 2; 130 nearObj = null; 131 } 132 else if (velocity.magnitude < 0.1 || moveVector != new Vector3(1, 1, 1)) 133 { 134 //動いていない場合は走らない。 135 animator.SetBool("Run", false); 136 EndAvoid(); 137 Aboid.fillAmount += 1.0f / avoidtime * Time.deltaTime; 138 if (delta <= 2) 139 { 140 delta += Time.deltaTime;//時間経過 141 } 142/////////////////////魔法部分///////////////////////////// 143 Magic = (GameObject)Resources.Load(magic[i]);// 144////////////////////////////////////////////////////// 145 //最も近かったオブジェクトを取得 146 nearObj = SerchTag(gameObject, "Enemy"); 147/////////////////////魔法部分///////////////////////////// 148 if (currentMana >= 25 && this.delta > this.span && nearObj != null && i == 0) 149 { 150 NomalMagic(); 151 } 152 if (currentMana >= 40 && this.delta > this.span && nearObj != null && i == 1) 153 { 154 BallMagic(); 155 } 156 if (this.delta < this.span) 157 { 158 animator.SetTrigger("EndMagic"); 159 } 160 } 161////////////////////////////////////////////////////////// 162 manaslider.value = currentMana / (float)maxMana; 163 164 if (nearObj == null) 165 { 166 return; 167 } 168 else 169 { 170 //対象の位置の方向を向く 171 transform.LookAt(nearObj.transform); 172 } 173 } 174 175 //指定されたタグの中で最も近いものを取得 176 GameObject SerchTag(GameObject nowObj, string tagName) 177 { 178 float tmpDis = 0; //距離用一時変数 179 float nearDis = 0; //最も近いオブジェクトの距離 180 GameObject targetObj = null; //オブジェクト 181 182 //タグ指定されたオブジェクトを配列で取得する 183 foreach (GameObject obs in GameObject.FindGameObjectsWithTag(tagName)) 184 { 185 //自身と取得したオブジェクトの距離を取得 186 tmpDis = Vector3.Distance(obs.transform.position, nowObj.transform.position); 187 188 //オブジェクトの距離が近いか、距離0であればオブジェクト名を取得 189 //一時変数に距離を格納 190 if (nearDis == 0 || nearDis > tmpDis) 191 { 192 nearDis = tmpDis; 193 targetObj = obs; 194 } 195 196 } 197 //最も近かったオブジェクトを返す 198 return targetObj; 199 } 200 201 202 // 203 public void OnAvoid() 204 { 205 if (Aboid.fillAmount == 1) 206 { 207 animator.SetTrigger("Avoid"); 208 moveSpeed = 8; 209 deltainvincible = 0; 210 Aboid.fillAmount = 0; 211 } 212 } 213 public void EndAvoid() 214 { 215 animator.SetTrigger("EndAvoid"); 216 moveSpeed = 4; 217 } 218 219/////////////////////魔法変更部分///////////////////////////// 220 public void OnChangeMagic() 221 { 222 if (magic.Count < 2) 223 { 224 return; 225 } 226 if (i < magic.Count-1) 227 { 228 i += 1; 229 } 230 else if (i >= magic.Count-1) 231 { 232 i = 0; 233 } 234 } 235/////////////////////////////////////////////////////// 236 237/////////////////////魔法習得部分///////////////////////////// 238 public void OnCollisionEnter(Collision collision) 239 { 240 if (collision.gameObject.CompareTag("FireBall")) 241 { 242 magic.Add("Magic/FireBall"); 243 Destroy(collision.gameObject.transform.root.gameObject); 244 } 245 if (collision.gameObject.CompareTag("IceBall")) 246 { 247 magic.Add("Magic/IceBall"); 248 Destroy(collision.gameObject.transform.root.gameObject); 249 } 250 if (collision.gameObject.CompareTag("EathBall")) 251 { 252 magic.Add("Magic/EathBall"); 253 Destroy(collision.gameObject.transform.root.gameObject); 254 } 255 } 256////////////////////////////////////////////////////////// 257 258 public void NomalMagic() 259 { 260 Vector3 playerPos = this.gameObject.transform.position; 261 262 Instantiate(Magic, new Vector3(playerPos.x, playerPos.y + 3, playerPos.z), Quaternion.identity); 263 animator.SetTrigger("FireBall"); 264 currentMana -= 25; 265 delta = 0; 266 } 267 public void BallMagic() 268 { 269 Vector3 playerPos = this.gameObject.transform.position; 270 271 Instantiate(Magic, new Vector3(playerPos.x, playerPos.y + 3, playerPos.z), Quaternion.identity); 272 animator.SetTrigger("FireBall"); 273 currentMana -= 40; 274 delta = 0; 275 } 276}
unity
1モンスターコード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class TutorialMonster : MonoBehaviour 8{ 9 public Animator animator; 10 int maxHp = 100; 11 int currentHp; 12 public Slider hpslider; 13 public float destroycount; 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 animator = this.gameObject.GetComponent<Animator>();// 19 hpslider.value = 1; 20 currentHp = maxHp; 21 } 22 23 // Update is called once per frame 24 void Update() 25 { 26 hpslider.value = currentHp / (float)maxHp; 27 if (currentHp <= 0) 28 { 29 animator.SetBool("Dead",true); 30 destroycount += Time.deltaTime; 31 } 32 if (destroycount >= 2) 33 { 34 Destroy(this.gameObject); 35 } 36 } 37 38 public void OnCollisionEnter(Collision collision) 39 { 40 if (collision.gameObject.CompareTag("NomalMagic")) 41 { 42 currentHp -= 25; 43 animator.SetTrigger("Damage"); 44 } 45 else 46 { 47 animator.SetTrigger("EndDamage"); 48 } 49 50 if (collision.gameObject.CompareTag("FireBall")|| collision.gameObject.CompareTag("IceBall") || collision.gameObject.CompareTag("EathBall")) 51 { 52 currentHp -= 50; 53 animator.SetTrigger("Damage"); 54 } 55 else 56 { 57 animator.SetTrigger("EndDamage"); 58 } 59 } 60 61} 62
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/19 10:17
2020/03/19 10:29
退会済みユーザー
2020/03/19 10:31
2020/03/19 13:08 編集
2020/03/19 11:01 編集
2020/03/19 10:59
退会済みユーザー
2020/03/19 17:29
退会済みユーザー
2020/03/20 04:51
2020/03/20 06:04 編集
2020/03/20 06:08 編集
退会済みユーザー
2020/03/20 06:32
退会済みユーザー
2020/03/20 06:35
2020/03/20 07:41
2020/03/20 07:45
退会済みユーザー
2020/03/20 07:59
退会済みユーザー
2020/03/20 08:08
2020/03/20 09:40 編集
2020/03/20 09:41 編集
退会済みユーザー
2020/03/20 10:27 編集
退会済みユーザー
2020/03/20 09:41
2020/03/20 10:11
退会済みユーザー
2020/03/20 10:27