1인 개발/나홀로 성 지키기

나홀로 성 지키기 개인 프로젝트 8일차

잼잼재미 2024. 3. 26. 20:00

구현 내용


1. LobyScene 제작

 

 

2. UI 구현

 

  • 일시정지 UI 구현 (볼륨 조절은 아직 미구현)
  • GameClear UI 구현
  • GameOver UI 구현

 

3. DangerTime 구현

 

제한 시간이 20초 남았을 때, 빨간색 화면이 깜빡이도록 구현. Panel의 color.a 값 조절을 코루틴으로 반복해서 구현.

 

 

https://kkln2486.tistory.com/382

 

화면 깜빡이기

구현 방법 1. Panel 생성 Panel을 생성해서 color.a 값을 중간 정도로 설정한 뒤, 칼라를 설정한다. 2. 스크립트 작성 FadeInOut using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;

kkln2486.tistory.com

 

 

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)를 성공하도록 하겠다!