前提・実現したいこと
このサイトを参考に、「壁のばし法の何もない点から壁を延ばし既存の壁につなぐやり方」をUnityの3Dゲームで迷路を作ろうとしました。しかし、以下のコードをアタッチし、動かした(「Play」ボタンを押した)ところ、何も変化が無いのでタスクマネージャーで確認すると、応答なしとなっていました。エラーコードも現時点で出てきてないので、初心者の私には何が間違っているのか全く分かりません。どこをどのように直せば壁のばし法が出来ますか?教えていただければとても嬉しいです。
発生している問題・エラーメッセージ
何も無し
該当のソースコード
まだまだ学習したばかりなので見にくい部分があったらごめんなさい。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5using System; 6 7public class MazeMaker : MonoBehaviour 8{ 9 public int Width, Height; 10 public GameObject wallPrefab; 11 private int[] Spornlist; //要素が、0…何も無い、1…今作っている壁がある、2…固定された壁がある 12 List<GameObject> MakingWall = new List<GameObject>(); 13 int checker, NESTchecker, ListD, Looker = 0; 14 bool[] nestcheck = { false, false, false, false }; 15 16 // Use this for initialization 17 void Start () 18 { 19 Width += 2; 20 Height += 2; 21 22 SpornListDirector(0); 23 Debug.Log("初期化完了"); 24 25 int A, B; 26 for (A = SpornListDirector(2), B = SpornListDirector(3); A != -1 || B != -1;) 27 { 28 //始める場所をランダムに決める 29 for (checker = SpornListDirector(4); checker != 0; checker = SpornListDirector(4)) { } 30 31 //決まったスタート場所に移動する 32 A = Width + 1; 33 int position2 = checker % A; //計算の明記 34 transform.position = new Vector3(position2 * 2, transform.position.y, Mathf.FloorToInt(checker / Width) * 2); 35 ListD = 1; 36 Looker = checker; 37 SpornListDirector(5); 38 MakeWall(); 39 } 40 } 41 42 // Update is called once per frame 43 void Update () 44 { 45 46 } 47 48 void MakeWall() 49 { 50 // 2マス先の壁をランダムに見る 51 NESTchecker = UnityEngine.Random.Range(0, 4); 52 //その結果をspornlistで確認出来るようにする 53 if (NESTchecker == 0) 54 { 55 Looker -= Width; 56 } 57 else if (NESTchecker == 1) 58 { 59 Looker++; 60 } 61 else if (NESTchecker == 2) 62 { 63 Looker += Width; 64 } 65 else if (NESTchecker == 3) 66 { 67 Looker--; 68 } 69 // 既に決定した壁だったら 70 int listchecker = SpornListDirector(1); 71 if (listchecker == 2) 72 { 73 WallMaker(); 74 75 WallDecide(2); 76 MakingWall.Clear(); 77 nestcheck[0] = false; 78 nestcheck[1] = false; 79 nestcheck[2] = false; 80 nestcheck[3] = false; 81 } 82 // 今作っている壁があったら 83 else if (listchecker == 1) 84 { 85 nestcheck[NESTchecker] = true; 86 if (nestcheck.Contains(false)) // いずれかの方向に壁が作れる場合 87 { 88 MakeWall(); 89 } 90 // どこにも壁が作れるスペースが無かった場合 91 { 92 // 今まで作った壁とそれらのデータを消す 93 checker = 0; 94 for (int counts = MakingWall.Count; checker <= counts; checker++) 95 { 96 Destroy(MakingWall[checker]); 97 } 98 MakingWall.Clear(); 99 WallDecide(0); 100 nestcheck[0] = false; 101 nestcheck[1] = false; 102 nestcheck[2] = false; 103 nestcheck[3] = false; 104 } 105 } 106 //何も無かったら壁を伸ばす 107 { 108 WallMaker(); 109 nestcheck[0] = false; 110 nestcheck[1] = false; 111 nestcheck[2] = false; 112 nestcheck[3] = false; 113 MakeWall(); 114 } 115 } 116 117 void WallMaker() 118 { 119 //壁を作る 120 for (int i = 0; i < 2; i++) 121 { 122 int keyX = 0, keyZ = 0; 123 if (NESTchecker == 0) 124 { 125 keyZ = 1; 126 } 127 else if (NESTchecker == 1) 128 { 129 keyX = 1; 130 } 131 else if (NESTchecker == 2) 132 { 133 keyZ = -1; 134 } 135 else if (NESTchecker == 3) 136 { 137 keyX = -1; 138 } 139 transform.Translate(keyX, 0, keyZ); 140 GameObject go = Instantiate(this.wallPrefab) as GameObject; 141 go.gameObject.transform.position = this.transform.position; 142 MakingWall.Add(go); 143 } 144 SpornListDirector(5); 145 } 146 147 void WallDecide(int a) 148 { 149 ListD = a; 150 // 「今作っている壁がある」とされているところを全て変える 151 for (int num = Array.IndexOf(Spornlist, 1); num != -1; num = Array.IndexOf(Spornlist, 1)) // 「今作っている壁がある」とされているインデックス番号を取得 152 { 153 Looker = num; 154 SpornListDirector(5); 155 } 156 } 157 158 int SpornListDirector(int Controller) 159 { 160 if (Controller == 0) 161 { 162 Spornlist = new int[Width * Height]; 163 //スポーンリストの初期化 164 for (checker = 0; checker < Spornlist.Length; checker++) 165 { 166 if (checker <= 13 || checker % 13 == 0 || checker % 13 == 12 || checker >= 132) //hierarchy上に壁がある所のみ変える 167 { 168 Spornlist[checker] = 2; 169 } 170 else 171 { 172 Spornlist[checker] = 0; 173 } 174 } 175 Controller = 0; 176 } 177 178 if (Controller == 1) //指定要素を取得 179 { 180 Controller = Spornlist[Looker]; 181 } 182 183 if (Controller == 2) //「0」になっている要素を検索 184 { 185 Controller = Array.IndexOf(Spornlist, 0); 186 } 187 if (Controller == 3) //「1」になっている要素を検索 188 { 189 Controller = Array.IndexOf(Spornlist, 1); 190 } 191 192 if (Controller == 4) //スタート地点を決める 193 { 194 Controller = UnityEngine.Random.Range(14, 132); 195 } 196 197 if (Controller == 5) //指定要素を変える 198 { 199 Spornlist[Looker] = ListD; 200 } 201 return Controller; 202 } 203} 204
試したこと
このスクリプトが正しくアタッチできるか、PrefabのGameObjectも問題無いかなど確認したが、何も問題は無かった。
補足情報(FW/ツールのバージョンなど)
- Unity 2020.3.0f1 Personal
- Visual Studio 2019
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/31 12:49