개발/WHITE POLYGON
[퍼즐게임] WHITE POLYGON - 10
ssong_dev
2022. 8. 8. 00:34
Stage Change 클래스를 좀 더 편하게 손보았다. 초반에 작성했던 스크립트라 퀘스트 시스템에서 다소 따로 놀았는데
기능 자체는 따로 [System.Serializable]로 묶어두고 상속을 다르게 받아 사용하도록 해 보았다.
그래도 똑같은 스크립트 사용하는 건 마찬가지인 것 같긴 한데...
[System.Serializable]
public class CStageChange
{
[SerializeField]
private bool transformEffectShow;
[SerializeField]
public TransformChange transformChange;
[SerializeField]
public GameObject toBigCube;
[SerializeField]
private string changeTargetScene;
public void SceneChangeEffect()
{
if(transformEffectShow)
{
toBigCube.SetActive(true);
transformChange.MoveStart();
transformChange.endTransformEvent += BlackInOut.Instance.ReadyToChangeScene;
}
else
{
BlackInOut.Instance.ReadyToChangeScene();
}
BlackInOut.Instance.ChangeTargetScene = changeTargetScene;
BlackInOut.Instance.FadeOut();
if (changeTargetScene == "Octahedron")
{
CStageManager stageManager = CStageManager.Instance;
stageManager.octahedron = true;
}
}
}
public class CStageClickEvent : QClickEvent
{
[Header("StageChangeOption")]
[SerializeField]
private CStageChange stageChange;
public override void Start()
{
StartQuestAdd += stageChange.SceneChangeEffect;
}
}
public class CStageTriggerEvent : QTriggerEvent
{
[Header("StageChangeOption")]
[SerializeField]
private CStageChange stageChange;
public override void Start()
{
StartQuestAdd += stageChange.SceneChangeEffect;
}
}
씬 전환 시 이전 씬에 있던 카메라 위치가 저장되도록 하였다.
각 퀘스트 클리어 여부는 SetActiveState를 오버라이드 해서 사용하고 있다.
public void SetQuestComponentInfo(CQuestComponent a_Quest)
{
string addKey = sceneName + "_" + a_Quest.gameObject.name + "_" + a_Quest.GetType().ToString();
if (questComponentInfos.ContainsKey(addKey))
{
bool tempStart;
bool tempClear;
tempStart = questComponentInfos[addKey].questStart;
tempClear = questComponentInfos[addKey].questClear;
a_Quest.QuestStart = tempStart;
a_Quest.QuestClear = tempClear;
}
else
{
AddEvent(a_Quest);
}
AddQuestState(a_Quest);
}
public void AddQuestState(CQuestComponent a_Quest)
{
a_Quest.SetActiveState();
}