1. 오늘 학습 키워드
엔딩 해금, 상단 바 토글 수정, 미니게임 결과
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
엔딩 해금은 엔딩을 볼 시에 isLocked 를 false로 변경시켜서 크레딧 패널에서 해당 엔딩을 다시 볼 수 있도록 했고,
상단 바 토글은 뒤로가기가 따로 노는 듯한 느낌이라고 하셨는데 뒤로가기 버튼이 buttons의 부모 아래에 없어서 생긴 일이였다.
그리고 미니게임 결과같은 경우는 bool 값을 받아서 클리어 여부를 판단하고,
StartScene 즉 크레딧 패널에서 온 것이 아니라면, 체력 관련 로직을 행하고, 다음 씬 이동이 되도록 짰다.
public void MiniGameManage(bool isSuccess)
{
// payload에서 bool 값을 확인
bool returnToStart = false;
// 현재 씬의 payload 가져오기
var currentScene = Current;
if (currentScene != null)
{
Debug.Log($"현재 씬: {SceneName}, Current: {currentScene.GetType().Name}");
// GetPayload 메서드로 스크립트에서 직접 참조 없이 payload 접근
var payload = currentScene.GetPayload<object>();
Debug.Log("페이로드: " + (payload != null ? payload.ToString() : "null"));
// payload가 배열 형태로 전달되었을 경우
if (payload is object[] payloadArray)
{
Debug.Log("Payload 배열 길이: " + payloadArray.Length);
for (int i = 0; i < payloadArray.Length; i++)
{
Debug.Log($"Payload[{i}] = {payloadArray[i]}");
}
if (payloadArray.Length > 1 && payloadArray[1] is bool returnFlag)
{
returnToStart = returnFlag;
Debug.Log("returnToStart 값: " + returnToStart);
}
}
}
// 시작 씬에서 왔는지 확인 (크레딧 용도)
if (fromStartScene)
{
// 시작 씬에서 왔을 경우 체력 관련 로직 없이 씬 이동만 처리
GoToNextScene(returnToStart);
}
else
{
// 일반 게임 플레이 상황
if (isSuccess)
{
// 성공 시 정신력 회복
Manager.Instance.DataManager.Heal(30);
}
else
{
// 실패 시 정신력 감소
Manager.Instance.DataManager.Damage(20);
}
// 다음 씬으로 이동
GoToNextScene(returnToStart);
}
}
어드레서블로 전달해줘야하는 부분이 다르기에 하드코딩이 되었지만, 1회차 치곤,, 나쁘지 않다고 생각한다.
private void GoToNextScene(bool returnToStart)
{
if (returnToStart)
{
// StartScene으로 돌아가는 경우
var labelMapping = new AssetLabelMapping[]
{
new AssetLabelMapping
{
label = "Ending",
assetType = AssetType.EndingSO
},
new AssetLabelMapping
{
label = "MiniGame",
assetType = AssetType.MiniGameDataSO
},
new AssetLabelMapping
{
label = "BGM",
assetType = AssetType.AudioClip
},
new AssetLabelMapping
{
label = "SFX",
assetType = AssetType.AudioClip
}
};
var loadData = CreateLoadingSceneData(labelMapping, "StartScene", null);
LoadScene("LoadingScene", loadData);
}
else
{
// 기존처럼 MapScene으로 이동하는 경우
var labelMapping = new AssetLabelMapping[]
{
new AssetLabelMapping
{
label = "NodeType",
assetType = AssetType._NodeTypeDataSO
},
new AssetLabelMapping
{
label = "Character",
assetType = AssetType.CharacterSO
},
new AssetLabelMapping
{
label = "BGM",
assetType = AssetType.AudioClip
},
new AssetLabelMapping
{
label = "SFX",
assetType = AssetType.AudioClip
}
};
var loadData = CreateLoadingSceneData(labelMapping, "MapScene", new object[] { });
LoadScene("LoadingScene", loadData);
}
}
3. 학습하며 겪었던 문제점 & 에러
딱히? 없었던 것 같다 굳이 따지면 정신력 표시 텍스트가 크레딧에서 시작할 때 텍스트를 Inactive로 바꾸려고 했는데,
현재 한 0.2~0.3초 뒤에 사라진다. 이 부분은 추후 페이드 효과를 넣거나 아님 아직은 딱히 방법이 안떠오른다
4. 내일 학습 할 것은 무엇인지
애니메이션을 다 깔아두고 이미지를 다 원래의 크기로 바꾼 뒤에 다 실행해보며 확인했기에 이 부분 코드에 하드코딩으로 넣을 예정이다.