/// <summary> /// 指定された部屋とその周辺をアクティブ化させる /// それ以外は非アクティブ状態にしておく /// </summary> private void SwitchActiveRoom(PlayRoom arg_playRoom) { if (arg_playRoom == null) { Debug.LogError("部屋がNULLです"); return; } m_activePlayroom = arg_playRoom; List <uint> m_sideRoomId = m_activePlayroom.GetSideRoomsId(); foreach (PlayRoom playRoom in m_playRooms) { if (playRoom == m_activePlayroom) { playRoom.gameObject.SetActive(true); continue; } if (m_sideRoomId.Contains(playRoom.Id)) { playRoom.gameObject.SetActive(true); } else { playRoom.gameObject.SetActive(false); } } }
/// <summary> /// 初期化 /// </summary> /// <param name="arg_player">プレイヤー</param> /// <param name="arg_defaultRoomId">プレイさせる小部屋ID</param> /// <param name="arg_onGoalAction">ゴール時のコールバック</param> public void Initialize(Player arg_player, uint arg_defaultRoomId, System.Action <object> arg_onGoalAction) { if (arg_player == null) { Debug.LogError("プレイヤーが見つかりません"); return; } if (arg_onGoalAction == null) { Debug.LogError("コールバックが設定されていません"); return; } m_player = arg_player; m_onGoalAction = arg_onGoalAction; #region ステージ情報の取得 m_startPoints = transform.GetComponentsInChildren <StartPoint>().ToList(); m_goalPoints = transform.GetComponentsInChildren <GoalPoint>().ToList(); m_playRooms = transform.GetComponentsInChildren <PlayRoom>().ToList(); foreach (GoalPoint goalPoint in m_goalPoints) { goalPoint.Initialize(this.OnGoalPoint); } foreach (PlayRoom playRoom in m_playRooms) { playRoom.Initialize(this.OnRoomEnter); } //初期リスタート地点を設定 PlayRoom defaultRoom = m_playRooms.Find(_ => _.Id == arg_defaultRoomId); if (defaultRoom == null) { Debug.LogError("指定されたIDの部屋が見つかりません:" + "<color=red>" + arg_defaultRoomId + "</color>"); } SwitchActiveRoom(defaultRoom); #endregion if (m_activePlayroom == null) { Debug.LogError("指定されたIDのスタート地点が見つかりません:" + "<color=red>" + arg_defaultRoomId + "</color>"); } if (CameraPosController.Instance == null) { Debug.LogError("カメラ遷移の機能が使用できません"); } CameraPosController.Instance.SetTargetObject(m_player.gameObject); PlayerGenerate(); StartCoroutine(OnUpdate()); }
//------------------------------------------- // 以下、コールバック //------------------------------------------- /// <summary> /// 部屋に入ったときの処理 /// 入ったときにコールバックとして呼ばれる /// </summary> /// <param name="arg_nextRoom"></param> private void OnRoomEnter(PlayRoom arg_nextRoom) { if (arg_nextRoom == m_activePlayroom) { return; } UpdatePlayingRoom(m_activePlayroom.Id); //スムーズなカメラ遷移を開始させる CameraPosController.Instance.SetTargetAndStart((int)arg_nextRoom.Id); this.SwitchActiveRoom(arg_nextRoom); }