
前提・実現したいこと
簡潔に言うと、ランダムに選んだ数字によって格納するenemyを決定し、指定の座標でインスタンス化した後、Translateで移動させたい。
①test1flagがtrueのときにEnemyselectnum()で0から1の乱数を一度だけ入手(今後数字の範囲は増やす予定)→数字をselect_enemynumに代入し、void FixedUpdate()内で使えるようにする。falseのときは実行する処理は無しなので、使わない数字の-1を代入した。
②select_enemynumが0のとき→ 配列型のgetenemy[0]の敵をセット。1のとき→getenemy[0]の敵をセットする。格納するenemy1とenemy2はImageのプレハブで、Inspectorに格納した。
③getenemy[i]をenemyobjのGameObjectとして指定の座標でインスタンス化し、x軸負の方向へ移動させ続けたい。
④_②と③をfor文で処理。
発生している問題・エラーメッセージ
エラーなし。①select_enemynumの結果によらず、enemy1しか表示されない。② rect_setenemy.Translate(-0.1f, 0, 0);の処理が実行されない。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Enemy : MonoBehaviour 6{ 7 public GameObject enemy1; 8 public GameObject enemy2; 9 public GameObject canvas; 10 11 GameObject[] getenemy = new GameObject[2]; 12 13 bool test1flag; 14 15 RectTransform enemyrect; 16 17 float enemyposx; 18 float enemyposy; 19 float enemyposz; 20 21 int select_enemynum; 22 23 // Start is called before the first frame update 24 void Start() 25 { 26 test1flag = true; 27 28 getenemy[0] = enemy1; 29 getenemy[1] = enemy2; 30 } 31 32 // Update is called once per frame 33 void FixedUpdate() 34 { 35 Enemyselectnum(); 36 37 for (int i = 0; i <= 1; i++) 38 { 39 if (select_enemynum == i) 40 { 41 enemyrect = getenemy[i].GetComponent<RectTransform>(); 42 Debug.Log(getenemy[i]);//enemy1しか表示されない 43 44 enemyposx = enemyrect.localPosition.x; 45 enemyposy = enemyrect.localPosition.y; 46 enemyposz = enemyrect.localPosition.z; 47 48 enemyposx = 78; 49 enemyposy = 108; 50 enemyposx = 0; 51 52 Vector3 enemypos = new Vector3(enemyposx, enemyposy, enemyposz); 53 54 GameObject enemyobj = Instantiate(getenemy[i], enemypos, Quaternion.identity); 55 enemyobj.transform.SetParent(canvas.transform, false); 56 57 //生成したPrefabを左へ移動させる 58 RectTransform rect_setenemy; 59 rect_setenemy = enemyobj.GetComponent<RectTransform>(); 60 rect_setenemy.Translate(-0.1f, 0, 0); 61 } 62 } 63 } 64 65 private int Enemyselectnum() 66 { 67 if (test1flag == true) 68 { 69 int select_enemynum = Random.Range(0, 2); 70 test1flag = false; 71 Debug.Log(select_enemynum); 72 return select_enemynum; 73 } 74 else 75 { 76 return select_enemynum = -1; 77 } 78 } 79} 80 81
試したこと
デバッグの結果から、select_enemynum == 0のときにenemy1が格納され、select_enemynum == 1のときもenemy1が格納されてしまうことは確認済み。発生している問題①はfor文の認識を何か誤っているのかもしれませんが、エラーが出ていない以上、それ以上の原因追及ができませんでした。
補足情報(FW/ツールのバージョンなど)
Unityバージョン、2020.3.18f1





回答2件
あなたの回答
tips
プレビュー