/* * 袋小路の作成 */ public Road2 CreateBlindAlley() { if (nextAreaIDList.Count != 2) { return(null); } List <int> dir_list = new List <int>() { TOP, LEFT, BOTTOM, RIGHT, }; for (int i = 0; i < nextAreaIDList.Count; i++) { int dir = GetDirection(nextAreaIDList[i]); for (int n = 0; n < dir_list.Count; n++) { if (dir == dir_list[n]) { dir_list.RemoveAt(n); break; } } } int rand = Random.Range(0, dir_list.Count); room.CreateDoor(dir_list[rand]); Door door_dummy = new Door() { Dir = DEADEND, }; switch (dir_list[rand]) { case TOP: door_dummy.X = Random.Range(Mathf.Abs(_left - 2), Mathf.Abs(_right + 2)) * -1; door_dummy.Z = _top + 1; break; case LEFT: door_dummy.X = _left - 1; door_dummy.Z = Random.Range(_top + 3, _bottom - 3); break; case BOTTOM: door_dummy.X = Random.Range(Mathf.Abs(_left - 2), Mathf.Abs(_right + 2)) * -1; door_dummy.Z = _bottom - 2; break; case RIGHT: door_dummy.X = _right + 2; door_dummy.Z = Random.Range(_top + 3, _bottom - 3); break; } Door out_door = room.GetDoor(2); Road2 road = new Road2(door_dummy, out_door); // あまりにも短い袋小路状態なら作成しない if (road.GetRoadLength() > 3 /* MG 気を付けて */) { return(road); } else { Debug.Log("短い袋小路が生成されました。"); Debug.Log("袋小路を削除 & ドアを削除"); room.DestroyDoor(); return(null); } }