¡¡ºîÀ®¤·¤¿Éð´ï¤Î¼èÆÀÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÅÐÏ¿¤·¡¢¥ß¥Ã¥·¥ç¥óÆâ¤ÇÉð´ï¤Î¼èÆÀ¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿ºÝ¤Ë
¥²¡¼¥à²èÌ̤ËÉð´ï¤Î¼èÆÀÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òɽ¼¨¤µ¤»¤ëÀ©¸æ¤ò¼ÂÁõ¤·¤Þ¤¹¡£
¡¡Start ¥á¥½¥Ã¥É¤Î TODO ¤ÎÉôʬ¤ò¼ÂÁõ¤¹¤ë¤È¤È¤â¤Ë¡¢PreparateMission ¥á¥½¥Ã¥É¡¢ObservateMission ¥á¥½¥Ã¥É¡¢EndMission ¥á¥½¥Ã¥ÉÆâ¤Î³Æ TODO ¤ÎÉôʬ¤Î¼ÂÁõ¤ò¹Ô¤¤¤Þ¤¹¡£
¤¤¤º¤ì¤âÉð´ï¤Î¼èÆÀ¥¤¥Ù¥ó¥È¤Î TODO ¤È¤·¤ÆµºÜ¤·¤Æ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤É¤¦¤¤¤Ã¤¿½èÍý¤¬Å¬ÀڤʤΤ«¤ò¼«Ê¬¤Ç¤â¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡¡IsMissionTrigger ÊÑ¿ô¤òÍøÍѤ·¤Æ¡¢¥ß¥Ã¥·¥ç¥ó¤¬È¯À¸¤¹¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
¤½¤ÎÉôʬ¤ËÃåÌܤ·¤Ê¤¬¤é¡¢¥ß¥Ã¥·¥ç¥óȯÀ¸»þ¤Ë¡¢¤É¤Î¤è¤¦¤Ë¤·¤Æ¥¤¥Ù¥ó¥È¤Îʬ´ô¡¼Å¨¤Î½Ð¸½¤ÈÉð´ï¤Î¼èÆÀ¡¼¤ò¹Ô¤¨¤Ð¤¤¤¤¤«¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
GameManager.cs
<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹¡£
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour {
[SerializeField]
private RailMoveController railMoveController;
[SerializeField, Header("·ÐÏ©ÍѤΥѥ¹·²¤Î¸µ¥Ç¡¼¥¿")]
private RailPathData originRailPathData; // ¸åÄø List ²½¤·¤ÆÊ£¿ô¤Î¥ë¡¼¥È¤ò´ÉÍý¤Ç¤¤ë¤è¤¦¤Ë¤·¤Þ¤¹
[SerializeField, Header("¥Ñ¥¹¤Ë¤ª¤±¤ë¥ß¥Ã¥·¥ç¥ó¤ÎȯÀ¸Í̵")] // Debug ÍÑ
private bool[] isMissionTriggers;
[SerializeField]
private PlayerController playerController;
[SerializeField]
private EventGenerator eventGenerator;
[SerializeField, Header("¥ß¥Ã¥·¥ç¥ó¤ÇȯÀ¸¤·¤Æ¤¤¤ëŨ¤Î¥ê¥¹¥È")]
private List<EnemyController> enemiesList = new List<EnemyController>();
private int currentMissionDuration;
[Header("¸½ºß¤Î¥²¡¼¥à¤Î¿Ê¹Ô¾õÂÖ")]
public GameState currentGameState;
////* ¤³¤³¤«¤éÊÑ¿ô¤ÎÀë¸À¤ò£±¤ÄÄɲà *////
[SerializeField]
private WeaponEventInfo weaponEventInfo;
////* ¤³¤³¤Þ¤Ç *////
private IEnumerator Start() {
// ¥²¡¼¥à¤Î¾õÂÖ¤ò½àÈ÷Ãæ¤Ë¤¹¤ë
currentGameState = GameState.Wait;
// TODO ¥ë¡¼¥ÈÍѤηÐÏ©¾ðÊó¤òÀßÄê
// ¥¤¥Ù¥ó¥ÈÀ¸À®µ¡Ç½¤Î½àÈ÷
eventGenerator.SetUpEventGenerator(this, playerController);
// ½é´üÉð´ïÅÐÏ¿
GameData.instance.AddWeaponData(DataBaseManager.instance.GetWeaponData(0));
////*¡¡¤³¤³¤«¤é½èÍý¤òÄɲá¡*////
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥ÈÍѤÎÀßÄê
weaponEventInfo.InitializeWeaponEventInfo();
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
// ½é´üÉð´ïÀßÄê
playerController.ChangeBulletData(GameData.instance.weaponDatasList[0]);
// RailMoveController ¤Î½é´üÀßÄê
railMoveController.SetUpRailMoveController(this);
// ¥Ñ¥¹¥Ç¡¼¥¿¤è¤ê¥ß¥Ã¥·¥ç¥ó¤ÎȯÀ¸Í̵¾ðÊó¼èÆÀ
SetMissionTriggers();
// ¼¡¤ËºÆÀ¸¤¹¤ë¥ì¡¼¥ë°ÜÆ°¤ÎÌÜŪÃϤȷÐÏ©¤Î¥Ñ¥¹¤òÀßÄê
railMoveController.SetNextRailPathData(originRailPathData);
// ·ÐÏ©¤Î½àÈ÷¤¬´°Î»¤¹¤ë¤Î¤òÂÔ¤Ä
yield return new WaitUntil(() => railMoveController.GetMoveSetting());
// ¥²¡¼¥à¤Î¾õÂÖ¤ò¥×¥ì¥¤Ãæ¤ËÊѹ¹¤¹¤ë
currentGameState = GameState.Play_Move;
}
/// <summary>
/// ¥Ñ¥¹¥Ç¡¼¥¿¤è¤ê¥ß¥Ã¥·¥ç¥ó¤ÎȯÀ¸Í̵¾ðÊó¼èÆÀ
/// </summary>
private void SetMissionTriggers() {
// ÇÛÎó¤Î½é´ü²½
isMissionTriggers = new bool[originRailPathData.GetIsMissionTriggers().Length];
// ¥ß¥Ã¥·¥ç¥óȯÀ¸Í̵¤Î¾ðÊó¤òÅÐÏ¿
isMissionTriggers = originRailPathData.GetIsMissionTriggers();
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó¤ÎȯÀ¸Í̵¤ÎȽÄê
/// </summary>
/// <param name="index"></param>
public void CheckMissionTrigger(int index) {
if (isMissionTriggers[index]) {
// ¥ß¥Ã¥·¥ç¥óȯÀ¸
PreparateMission(originRailPathData.pathDataDetails[index].missionEventDetail);
Debug.Log("¥ß¥Ã¥·¥ç¥óȯÀ¸");
} else {
// ¥ß¥Ã¥·¥ç¥ó¤Ê¤·¡£¼¡¤Î¥Ñ¥¹¤Ø°ÜÆ°¤òºÆ³«
railMoveController.CountUp();
}
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó¤Î½àÈ÷
/// </summary>
/// <param name="missionEventDetail"></param>
private void PreparateMission(MissionEventDetail missionEventDetail) {
// ¥ß¥Ã¥·¥ç¥ó¤Î»þ´ÖÀßÄê
currentMissionDuration = missionEventDetail.missionDuration;
////*¡¡¤³¤³¤«¤é TODO ¤ò¼ÂÁõ¡¡*////
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È¤«È½Äê
if (missionEventDetail.eventTypes[0] == EventType.Weapon) {
// Éð´ï¤Î¾ðÊó¤ò¼èÆÀ¤·¤Æ¥»¥Ã¥È
weaponEventInfo.SetWeaponData(DataBaseManager.instance.GetWeaponData(missionEventDetail.eventNos[0]));
weaponEventInfo.Show();
} else {
// ¥ß¥Ã¥·¥ç¥óÆâ¤Î³Æ¥¤¥Ù¥ó¥È¤ÎÀ¸À®(Ũ¡¢¥®¥ß¥Ã¥¯¡¢¥È¥é¥Ã¥×¡¢¥¢¥¤¥Æ¥à¤Ê¤É¤òÀ¸À®)
eventGenerator.PrepareGenerateEnemies(missionEventDetail.enemyPrefabs, missionEventDetail.eventTrans);
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
// ¥ß¥Ã¥·¥ç¥ó³«»Ï
StartCoroutine(StartMission(missionEventDetail.clearConditionsType));
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó³«»Ï
/// </summary>
/// <param name="clearConditionsType"></param>
/// <returns></returns>
private IEnumerator StartMission(ClearConditionsType clearConditionsType) {
// ¥²¡¼¥à¤Î¿Ê¹Ô¾õÂÖ¤ò¥ß¥Ã¥·¥ç¥óÃæ¤ËÊѹ¹
currentGameState = GameState.Play_Mission;
// ¥ß¥Ã¥·¥ç¥ó¤Î´Æ»ë
yield return StartCoroutine(ObservateMission(clearConditionsType));
// ¥ß¥Ã¥·¥ç¥ó½ªÎ»
EndMission();
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó¤Î´Æ»ë
/// ³Æ¥¤¥Ù¥ó¥È¤Î¾õÂÖ¤ò´Æ»ë
/// </summary>
/// <param name="clearConditionsType"></param>
/// <returns></returns>
private IEnumerator ObservateMission(ClearConditionsType clearConditionsType) {
// ¥¯¥ê¥¢¾ò·ï¤òËþ¤¿¤¹¤Þ¤Ç´Æ»ë(currentMissionDuration ÊÑ¿ô¤Ë¤Ï¡¢Å¨¤Î¿ô¤«¡¢»Ä¤ê»þ´Ö¤¬Æþ¤ë)
while (currentMissionDuration > 0) {
// ¥¯¥ê¥¢¾ò·ï¤¬»þ´Ö·Ð²á¤Î¾ì¹ç
if (clearConditionsType == ClearConditionsType.TimeUp) {
// ¥«¥¦¥ó¥È¥À¥¦¥ó
currentMissionDuration--;
}
////*¡¡TODO ¤Î¼ÂÁõ¡¡*////
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È¤«¤Ä¡¢Éð´ïÁªÂò¤Î¤¤¤º¤ì¤«¤Î¥Ü¥¿¥ó¤ò²¡¤·¤¿¤é
if (weaponEventInfo.gameObject.activeSelf && weaponEventInfo.isChooseWeapon) {
// ¥¤¥Ù¥ó¥È½ªÎ»
currentMissionDuration = 0;
weaponEventInfo.Hide();
Debug.Log("Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È½ªÎ»");
yield break;
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
yield return null;
}
Debug.Log("¥ß¥Ã¥·¥ç¥ó½ªÎ»");
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó½ªÎ»
/// </summary>
public void EndMission() {
////*¡¡TODO ¤Î¼ÂÁõ¡¡*////
// Éð´ï¤Î¼èÆÀ¥¤¥Ù¥ó¥È¤Î¾ì¹ç¤Ë¤ÏÉð´ï¤ò¼èÆÀ¤»¤º¤Ë¥Ý¥Ã¥×¥¢¥Ã¥×¤òÊĤ¸¤ë
if (weaponEventInfo.gameObject.activeSelf) {
weaponEventInfo.Hide();
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
// º£²óʬ¤ÎŨ¤Î¾ðÊó¤ò¥¯¥ê¥¢
ClearEnemiesList();
// ¥²¡¼¥à¤Î¿Ê¹Ô¾õÂÖ¤ò°ÜÆ°Ãæ¤ËÊѹ¹
currentGameState = GameState.Play_Move;
// ¥«¥á¥é¤Î°ÜÆ°ºÆ³«
railMoveController.CountUp();
}
/// <summary>
/// Ũ¤Î List ¤ò¥¯¥ê¥¢
/// </summary>
private void ClearEnemiesList() {
if (enemiesList.Count > 0) {
for (int i = 0; i < enemiesList.Count; i++) {
Destroy(enemiesList[i]);
}
}
enemiesList.Clear();
}
/// <summary>
/// Ũ¤Î¾ðÊó¤ò List ¤«¤éºï½ü¤·¡¢¥ß¥Ã¥·¥ç¥óÆâ¤ÎŨ¤Î»Ä¿ô¤ò¸º¤é¤¹
/// </summary>
/// <param name="enemy"></param>
public void RemoveEnemyList(EnemyController enemy) {
currentMissionDuration--;
enemiesList.Remove(enemy);
}
/// <summary>
/// Ũ¤Î¾ðÊó¤ò¥ê¥¹¥È¤ËÄɲÃ
/// </summary>
/// <param name="enemy"></param>
public void AddEnemyList(EnemyController enemy) {
enemiesList.Add(enemy);
}
}
¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£