public void ResetMap() { this.Objects.Clear(); this.Characters.Clear(); var generator = new DungeonMapGenerator(); generator.CreateMap(new Form(10, 10), new Form(4, 4), UnityEngine.Random.Range(5, 10)); this.MapSize = generator.MapSize; this.MapData = generator.Map; this.Rooms = generator.Rooms; //階段生成 AddObject(new Step(this) { IsNext = true }); //フロア情報取得 var floorInfo = Database.DataBase.FloorMasters[this.Floor]; //アイテム生成 var itemCnt = UnityEngine.Random.Range(4, 7); for (int i = 0; i < itemCnt; i++) { //フロア情報から抽選 var rotItem = floorInfo.ItemTable.WaitedSample(x => x.Rate); var count = rotItem.CountFrom > 0 ? UnityEngine.Random.Range(rotItem.CountFrom, rotItem.CountTo) : 0; AddObject(new Item(this, rotItem.ItemId, count)); } //プレイヤー生成 AddCharacter(new Player(this)); //モンスター生成 var enemyCnt = UnityEngine.Random.Range(3, 6); for (int i = 0; i < enemyCnt; i++) { //フロア情報から抽選 AddCharacter(new Enemy(this, floorInfo.EnemyTable.WaitedSample(x => x.Rate).Id)); } //TODO:削除しないでオブジェクトのリサイクル //オブジェクトを全削除 var cells = MapRoot.GetComponentsInChildren <SpriteRenderer>(); for (int i = 0; i < cells.Length; i++) { GameObject.Destroy(cells[i].gameObject); } var charas = CharacterRoot.GetComponentsInChildren <SpriteRenderer>(); for (int i = 0; i < charas.Length; i++) { GameObject.Destroy(charas[i].gameObject); } var objects = ObjectRoot.GetComponentsInChildren <SpriteRenderer>(); for (int i = 0; i < objects.Length; i++) { GameObject.Destroy(objects[i].gameObject); } var masks = MaskRoot.GetComponentsInChildren <SpriteRenderer>(); for (int i = 0; i < masks.Length; i++) { GameObject.Destroy(masks[i].gameObject); } //プレイヤー&敵オブジェクト配置 foreach (var chara in this.Characters) { chara.InstantiateObject(DungeonPrefabs.PlayerPrefab, CharacterRoot); } //その他オブジェクト配置 foreach (var obj in this.Objects) { obj.InstantiateObject(DungeonPrefabs.ObjectPrefab, ObjectRoot); } //マップ描画 CreateMap(); //マスク生成 var shadow = GameObject.Instantiate(DungeonPrefabs.ShadowPrefab).GetComponent <SpriteRenderer>(); shadow.transform.localScale = new Vector2(MapSize.x, MapSize.y); shadow.transform.localPosition = new Vector2(-16, 16); shadow.transform.SetParent(MaskRoot, false); this.MaskCircle = GameObject.Instantiate(DungeonPrefabs.MaskCirclePrefab).GetComponent <SpriteRenderer>(); this.MaskCircle.transform.SetParent(Player.Presenter.transform, false); this.MaskCircle.transform.localPosition = new Vector2(-40, 40); this.MaskRoom = GameObject.Instantiate(DungeonPrefabs.MaskRoomPrefab).GetComponent <SpriteRenderer>(); this.MaskRoom.transform.SetParent(MaskRoot, false); UpdateMaskImage(); }