¡¡ÊÑ¿ô¤ÎÀë¸À¤ò£±¤ÄÄɲä·¡¢¿·¤·¤¤¥á¥½¥Ã¥É¤ò£²¤ÄÄɲ䷤Ƥ¤¤Þ¤¹¡£
¤Þ¤¿½èÍý¤òÄɲ䷤Ƥ¤¤ëÉôʬ¤â¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢Á´ÂΤνèÍý¤Îή¤ì¤òÇİ®¤Ç¤¤ë¤è¤¦¤Ë¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤Ê¤¬¤éÆÉ¤ß²ò¤¯¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡º£¤Þ¤Ç¤Ï·ÐÏ©¤Î°Üư¤¬½ªÎ»¤¹¤ë¤¿¤Ó¤Ë¡¢RailMoveController ¦¤«¤é¡¢¥ß¥Ã¥·¥ç¥ó¤¬È¯À¸¤¹¤ë¤«¤É¤¦¤«¤òȽÄꤹ¤ë¤è¤¦¤ËÌ¿Îá¤ò¼õ¤±¤Æ¤¤¤Þ¤·¤¿¡£
¤³¤ÎÉôʬ¤ò½¤Àµ¤·¡¢¥ß¥Ã¥·¥ç¥ó¤¬È¯À¸¤¹¤ë¤«¤É¤¦¤«¤òȽÄê¤Ç¤Ï¤Ê¤¯¡¢¥à¡¼¥Ó¡¼¤ÎºÆÀ¸¤¬È¯À¸¤¹¤ë¤«¤òȽÄꤹ¤ë¤è¤¦¤ËÌ¿Îá¤ò¼õ¤±¤é¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¡¡¤½¤Î¾å¤Ç¡¢¥à¡¼¥Ó¡¼¤ÎºÆÀ¸¤¬È¯À¸¤·¤Ê¤¤¾ì¹ç¤Ë¸Â¤ê¡¢¥ß¥Ã¥·¥ç¥ó¤¬È¯À¸¤¹¤ë¤«¤É¤¦¤«¤òȽÄꤹ¤ë¤è¤¦¤Ë½¤Àµ¤·¤Æ¤¤¤Þ¤¹¡£
¤è¤Ã¤Æ¥à¡¼¥Ó¡¼¤ÎºÆÀ¸¤¬È¯À¸¤¹¤ë¾ì¹ç¤Ë¤Ï¥ß¥Ã¥·¥ç¥ó¤ÏȯÀ¸¤·¤Ê¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤ÎÉôʬ¤ÏŬµ¹¡¢½¤Àµ¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
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;
[SerializeField]
private UIManager uiManager;
[SerializeField]
private WeaponChanger weaponChanger;
[SerializeField]
private CameraController cameraController;
////* ¤³¤³¤«¤éÊÑ¿ô¤ÎÀë¸À¤ò£±¤ÄÄɲà *////
[SerializeField] ¡¡¡¡//¡¡Debug ÍÑ¤Ë SerializeField°À¤òÉÕÍ¿¤·¤Æ¤¤¤Þ¤¹¡£³Îǧ¤¬ºÑ¤ó¤À¤é SerializeField°À ¤Ïºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£
private bool[] isMoviePlays;
////* ¤³¤³¤Þ¤Ç *////
private IEnumerator Start() {
// ¥²¡¼¥à¤Î¾õÂÖ¤ò½àÈ÷Ãæ¤Ë¤¹¤ë
currentGameState = GameState.Wait;
// ¥ë¡¼¥ÈÍѤηÐÏ©¾ðÊó¤òÀßÄê
originRailPathData = DataBaseManager.instance.GetRailPathDatasFromBranchNo(0, BranchDirectionType.NoBranch);
// ¥¤¥Ù¥ó¥ÈÀ¸À®µ¡Ç½¤Î½àÈ÷
eventGenerator.SetUpEventGenerator(this, playerController);
// ½é´üÉð´ïÅÐÏ¿
GameData.instance.AddWeaponData(DataBaseManager.instance.GetWeaponData(0));
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥ÈÍѤÎÀßÄê
weaponEventInfo.InitializeWeaponEventInfo();
// ½é´üÉð´ïÀßÄê
playerController.ChangeBulletData(GameData.instance.weaponDatasList[0]);
// ½é´üÉð´ï¤Î¥â¥Ç¥ëɽ¼¨
weaponChanger.InitWeaponModel();
// 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();
////*¡¡¤³¤³¤«¤é½èÍý¤òÄɲä·¤Þ¤¹¡¡*////
// ¥à¡¼¥Ó¡¼ºÆÀ¸¾ðÊóÍѤÎÇÛÎó¤ò½é´ü²½
isMoviePlays = new bool[originRailPathData.GetIsMoviePlays().Length];
// ¥à¡¼¥Ó¡¼ºÆÀ¸Í̵¤Î¾ðÊó¤òÅÐÏ¿
isMoviePlays = originRailPathData.GetIsMoviePlays();
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
/// <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;
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È¤«È½Äê
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--;
}
// Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È¤«¤Ä¡¢Éð´ïÁªÂò¤Î¤¤¤º¤ì¤«¤Î¥Ü¥¿¥ó¤ò²¡¤·¤¿¤é
if (weaponEventInfo.gameObject.activeSelf && weaponEventInfo.isChooseWeapon) {
// ¥¤¥Ù¥ó¥È½ªÎ»
currentMissionDuration = 0;
weaponEventInfo.Hide();
Debug.Log("Éð´ï¼èÆÀ¥¤¥Ù¥ó¥È½ªÎ»");
yield break;
}
yield return null;
}
Debug.Log("¥ß¥Ã¥·¥ç¥ó½ªÎ»");
}
/// <summary>
/// ¥ß¥Ã¥·¥ç¥ó½ªÎ»
/// </summary>
public void EndMission() {
// Éð´ï¤Î¼èÆÀ¥¤¥Ù¥ó¥È¤Î¾ì¹ç¤Ë¤ÏÉð´ï¤ò¼èÆÀ¤»¤º¤Ë¥Ý¥Ã¥×¥¢¥Ã¥×¤òÊĤ¸¤ë
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);
}
/// <summary>
/// ¥ë¡¼¥È¤Îʬ´ô³Îǧ¤Î½àÈ÷
/// </summary>
/// <param name="nextbranchNo">moveCount</param>
public void PreparateCheckNextBranch(int nextbranchNo) {
StartCoroutine(CheckNextBranch(nextbranchNo));
}
/// <summary>
/// ¥ë¡¼¥È¤Îʬ´ôȽÄê
/// </summary>
/// <param name="nextStagePathDataNo"></param>
/// <returns></returns>
private IEnumerator CheckNextBranch(int nextStagePathDataNo) {
if (nextStagePathDataNo >= DataBaseManager.instance.GetStagePathDetasListCount()) {
// ½ªÎ»
Debug.Log("¥²¡¼¥à½ªÎ»");
// ¥×¥ì¥¤¥ä¡¼Â¦¤Î¥¯¥ê¥¢¤Î½àÈ÷
playerController.PrepareClearSettings();
// ¤¹¤Ù¤Æ¤ÎÉð´ï¤òÈóɽ¼¨
weaponChanger.InactiveWeapons();
// ¥«¥á¥é¤Î±é½Ð
cameraController.ClearCameraRoll(playerController.transform.position + new Vector3(0, 0, 10), new Vector3(0, 180, 0), new float[2] { 1.5f, 2.0f });
yield break;
}
// ¥ë¡¼¥È¤Ëʬ´ô¤¬¤¢¤ë¤«¤É¤¦¤«¤ÎȽÄê
if (DataBaseManager.instance.GetBranchDatasListCount(nextStagePathDataNo) == 1) {
Debug.Log("ʬ´ô¤Ê¤·¤Ç¼¡¤Î¥ë¡¼¥È¤Ø");
// ʬ´ô¤Ê¤·¤Î¾ì¹ç¡¢¼¡¤Î·ÐÏ©¤òÅÐÏ¿
originRailPathData = DataBaseManager.instance.GetRailPathDatasFromBranchNo(nextStagePathDataNo, BranchDirectionType.NoBranch);
} else {
// ʬ´ô¤¬¤¢¤ë¾ì¹ç¡¢UI ¤Ëʬ´ô¤òɽ¼¨¤·¡¢ÁªÂò¤òÂÔ¤Ä
Debug.Log("¥ë¡¼¥È¤Îʬ´ôȯÀ¸");
// ʬ´ô¤¬¤¢¤ë¾ì¹ç¡¢Ê¬´ô¥¤¥Ù¥ó¥È¤òȯÀ¸¤µ¤»¤Æ¡¢²èÌ̾å¤ËÌð°õ¤Î¥Ü¥¿¥ó¤òɽ¼¨
uiManager.GenerateBranchButtons(DataBaseManager.instance.GetBranchDirectionTypes(nextStagePathDataNo));
// ʬ´ô¤òÁªÂò¤¹¤ë¤Þ¤ÇÂÔµ¡(while ¤Ç¤âOK)
yield return new WaitUntil(() => uiManager.GetSubmitBranch().Item1 == true);
// ÁªÂò¤·¤¿Ê¬´ô¤Î¥ë¡¼¥È¤òÀßÄê
originRailPathData = DataBaseManager.instance.GetRailPathDatasFromBranchNo(nextStagePathDataNo, uiManager.GetSubmitBranch().Item2);
}
// ¥ë¡¼¥ÈÆâ¤Î¥ß¥Ã¥·¥ç¥ó¾ðÊó¤òÀßÄê
SetMissionTriggers();
// ·ÐÏ©¤ò°ÜưÀè¤ËÀßÄê
railMoveController.SetNextRailPathData(originRailPathData);
// ¥ì¡¼¥ë°Üư¤Î·ÐÏ©¤È°ÜưÅÐÏ¿¤¬´°Î»¤¹¤ë¤Þ¤ÇÂÔµ¡
yield return new WaitUntil(() => railMoveController.GetMoveSetting());
// ¥²¡¼¥à¤Î¿Ê¹Ô¾õÂÖ¤ò°ÜÆ°Ãæ¤ËÊѹ¹¤¹¤ë
currentGameState = GameState.Play_Move;
}
////*¡¡¥á¥½¥Ã¥É¤ò£²¤ÄÄɲä·¤Þ¤¹¡¡*////
/// <summary>
/// ¥à¡¼¥Ó¡¼¤òºÆÀ¸¤¹¤ë¤«³Îǧ
/// </summary>
/// <param name="index"></param>
public void CheckMoviePlay(int index) {
Debug.Log(index);
if (!isMoviePlays[index]) {
Debug.Log("¥à¡¼¥Ó¡¼ºÆÀ¸ ¤Ê¤·");
// ¥ß¥Ã¥·¥ç¥óȯÀ¸Í̵¤Î³Îǧ
CheckMissionTrigger(index);
} else {
// ¥à¡¼¥Ó¡¼ºÆÀ¸¤Î½àÈ÷
StartCoroutine(PrepareMoviePlay(index));
}
}
/// <summary>
/// ¥à¡¼¥Ó¡¼ºÆÀ¸¤Î½àÈ÷
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private IEnumerator PrepareMoviePlay(int index) {
Debug.Log("¥à¡¼¥Ó¡¼½àÈ÷³«»Ï");
// Canvas ¤òÈóɽ¼¨
uiManager.SwitchActivateCanvas(false);
// ÃÆ¤òȯ¼Í¤ò¤Ç¤¤Ê¤¤¤è¤¦¤Ë¤¹¤ë
playerController.IsShootPerimission = false;
yield return StartCoroutine(PlayMovie());
/// ¥à¡¼¥Ó¡¼ºÆÀ¸
IEnumerator PlayMovie() {
Debug.Log("¥à¡¼¥Ó¡¼ºÆÀ¸³«»Ï");
// ¥à¡¼¥Ó¡¼ºÆÀ¸¤Î½àÈ÷¤ÈºÆÀ¸
VideoClipManager.instance.PrepareVideoClip(originRailPathData.pathDataDetails[index].missionEventDetail.videoNo, originRailPathData.pathDataDetails[index].missionEventDetail.videoClip);
// ¥à¡¼¥Ó¡¼¤Î½àÈ÷»þ´Ö¤À¤±ÂÔµ¡
yield return new WaitForSeconds(1.5f);
Debug.Log("¥à¡¼¥Ó¡¼½àÈ÷ÂÔµ¡ ½ªÎ»");
// ¥à¡¼¥Ó¡¼ºÆÀ¸¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÂÔµ¡¡Ê¤É¤Á¤é¤Î½èÍý¤Ç¤âÂÔµ¡¤Ç¤¤Þ¤¹¡Ë
yield return new WaitUntil(() => !VideoClipManager.instance.IsVideoPlaying);
//yield return new WaitForSeconds((float)originRailPathData.pathDataDetails[index].missionEventDetail.videoClip.length);
Debug.Log("¥à¡¼¥Ó¡¼ºÆÀ¸¡¡½ªÎ»");
// ²èÌ̤Υե§¡¼¥É¥¤¥ó¤¬Ìá¤ë¤Þ¤Ç¤Î´Ö¡¢ÂÔµ¡¤·¤Æ¤«¤é
yield return new WaitForSeconds(1.0f);
// Canvas ¤òɽ¼¨
uiManager.SwitchActivateCanvas(true);
// ¥à¡¼¥Ó¡¼¤¬½ªÎ»¤·¤¿¤Î¤ÇÃÆ¤Îȯ¼Í¤òµö²Ä
playerController.IsShootPerimission = true;
// ¥ß¥Ã¥·¥ç¥óȯÀ¸Í̵¤Î³Îǧ
CheckMissionTrigger(index);
}
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£
¥³¥á¥ó¥È¤ò¤«¤¯