구현 내용
1. LobyScene 제작
2. UI 구현
- 일시정지 UI 구현 (볼륨 조절은 아직 미구현)
- GameClear UI 구현
- GameOver UI 구현
3. DangerTime 구현
제한 시간이 20초 남았을 때, 빨간색 화면이 깜빡이도록 구현. Panel의 color.a 값 조절을 코루틴으로 반복해서 구현.
https://kkln2486.tistory.com/382
public void AttackMelee()
{
if(_stageController.IsDangerTime) _castleController.CastleHit(_enemyController.EnemySO.Atk * _stageController.DangerTimeAtk);
else _castleController.CastleHit(_enemyController.EnemySO.Atk);
}
DangerTime일 때, 적의 공격력, 스피드를 상승
트러블 슈팅
1. GameManager의 씬 이동
GameManager를 DontDestroyOnLoad해서 씬 이동을 해도 파괴되지 않도록 했다. 하지만 위와 같이 씬 이동을 하게 되면 GameManager의 SoundManager의 함수를 실행하지 못하는 오류가 발생했다.
private void Awake()
{
if (I == null)
{
I = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
PlayerManager = GetComponentInChildren<PlayerManager>();
ScenesManager = GetComponentInChildren<ScenesManager>();
ObjectPoolManager = GetComponentInChildren<ObjectPoolManager>();
DataManager = GetComponentInChildren<DataManager>();
SoundManager = GetComponentInChildren<SoundManager>();
Init();
}
씬 이동할 때, GameManager가 두 개 일 때, 파괴하는 코드에서 오류가 있었다. 이유는 찾지 못했지만 씬 이동 직전에 GameMager의 Awake가 실행되서 각각 Manager들을 연결해주고, 씬을 이동했다. 그래서 이동한 씬에는 Awake에서 연결해준 변수들이 모두 null이 되었다.
private void Awake()
{
if (I == null)
{
I = this;
}
PlayerManager = GetComponentInChildren<PlayerManager>();
ScenesManager = GetComponentInChildren<ScenesManager>();
ObjectPoolManager = GetComponentInChildren<ObjectPoolManager>();
DataManager = GetComponentInChildren<DataManager>();
SoundManager = GetComponentInChildren<SoundManager>();
Init();
}
결국 해결 방법을 찾지 못하고 위와 같이 수정했다. 이렇게 구현을 하면 씬 이동 시, GameMager가 파괴되기 때문에, 각각 씬 마다 GameManager을 생성해야 한다. 근본적인 해결 방법은 찾지 못했지만 게임 자체가 씬이 두 개 뿐이기 때문에 이렇게 진행했다..
회고
오늘은 느낀 점이 많았다. 일단 LobyScene을 제작하는 것이 정말 어려웠다. 먼저, 무료로 구할 수 있는 에셋에는 퀄리티가 좋은 UI 에셋이 없었다. 그리고 UI를 배치하면서 내가 정말 미적 감각이 없는 개발자라는 것을 다시 한번 느낄 수 있었다. 기존 캐주얼 게임들의 Loby 이미지를 찾아보면서 최대한 참고해서 제작했다.
그리고 GameManager의 DontDestroyOnLoad(gameObject) 부분은 이전 프로젝트에서도 문제가 되었었다. GameManager를 하나만 생성하고 씬을 이동할 때마다 파괴되지 않도록 구현하고 싶었지만 이번 프로젝트에서도 실패했다. 이유는 전 프로젝트와 비슷했다. 새로운 씬에서 null 오류가 발생했고, 그 원인을 찾지 못했다. 이번 프로젝트에서는 씬이 수가 적고 사실은 각 씬 마다 GameManager를 생성해도 아무 상관은 없었다. 조금 아쉬웠지만 원활한 진행을 위해 다음 프로젝트에서는 꼭 GameManager의 DontDestroyOnLoad(gameObject)를 성공하도록 하겠다!
'1인 개발 > 나홀로 성 지키기' 카테고리의 다른 글
나홀로 성 지키기 개인 프로젝트 10일차 (0) | 2024.03.28 |
---|---|
나홀로 성 지키기 개인 프로젝트 9일차 (0) | 2024.03.27 |
나홀로 성 지키기 개인 프로젝트 7일차 (0) | 2024.03.25 |
나홀로 성 지키기 개인 프로젝트 6일차 (2) | 2024.03.23 |
나홀로 성 지키기 개인 프로젝트 5일차 (1) | 2024.03.22 |