Unity/Project

[Unity] 내배캠 최종프로젝트 : 루시퍼 서바이벌 8일차,

JEE_YA 2025. 4. 16. 21:11

오늘은 타일 깨지는걸 꼭 테스트 해볼테야 라는 목표를 가지고 (임시)플레이어 프리펩을 가져와서 놓았는데

플레이어쪽에 아직 상호작용은 없다고 하여 내가 임시로 테스트용 코드 하나 써놓고 해봐야지 했다.

근데 플레이어쪽은 제네릭으로 하여 구조를 되게 탄탄하게 해두셨는데 그 구조를 읽을수 없어 포기 ^^.... 아직 내가 제네릭에 대해 이해를 잘 하지 못하고 있어 어느쪽에 넣어 테스트를 해야할지 잘 모르겠더라.. 

 

그리고 코드를 한번 보았는데 내가 작성했던 RemoveTile(플레이어용 타일파괴 메서드)는 타일 위치를 읽어 파괴하게 했는데 플레이어는 자기위치를 알고있으니 굳이 외부위치에서 넘겨줄 필요가 없고 매개변수 없어도 사용할 수 있도록 오버로드를 요청주셨다.

그리하여 RemoveTile(Vector3 worldPos)로 작성했던 것에서 RemoveTile()로 다시 작성하게 되었다.

다만 오버로드는 처음 작성하다보니 처음엔 조금 헤멨는데.. 하다보니 감은 오더라! 작성은 아직 못했따

그만 알아보자

이거에 대해서 작성하고 플레이어쪽에 넘겨주고 테스트 하는게 내일 오전까지의 목표이며

기존에 MapManager와 상속받는 Map을 작성한 적이 있었는데, 코드를 계속 읽어보니 분리하여 작성할 필요가 있나 라는 생각이 들어 하나로 합쳐주고 낮과 밤을 관리해주는 TimeManager와 중복된 부분이 많아 그부분은 다 빼주었다.

    private void Update()
    {
        if (TimeManager.Instance.IsNight()) // 밤일 때
        {
            MapDay();
        }
        else // 낮일 때
        {
            MapNight();
        }
    }

    // 맵-낮
    private void MapDay()
    {
        // 맵에서 낮에 할수있는 효과들 (전투 등)
    }

    // 맵-밤
    private void MapNight()
    {
        // 맵에서 밤에 할수있는 효과들 (파밍 등)
    }

MapManager는 낮-밤일때를 TimeManager에서 받아와 해당 시간에 맵에서 어떤걸 할수있는지에 대해 관리하는걸로 정해주었다.

그리고 추후 자원이나 다른 요소들이 추가되면 해당 시간에만 가능할 수 있게 추가해주면 끝이다.

 

 

TimeManager는 원래 낮일때와 밤일때 따로 메서드는 없었고 Update를 통해 밤일때 시간이 다 되면 낮으로 변경, 낮일때 모든 유닛이 처치되면 밤으로 변경 이런식으로만 해두었었는데 추후 조명, 활성화 오브젝트 등을 따로 변경해주기 위해 낮과 밤에 대한 메서드를 따로 작성하였다.

    private void NightSet()
    {
        SetTimeState(TimeState.Night);
        // 밤일때 추가되는 조건들 (조명, 활성화 오브젝트 등)
    }

    private void DaySet()
    {
        SetTimeState(TimeState.Day);
        // 낮일때 추가되는 조건들 (조명, 활성화 오브젝트 등)
    }

아직까진 작성된게 많이 없지만 이 부분도 추후에 추가되거나 구성되는대로 수정할 예정이고 구조는 이런식으로 해두었다.

 

이렇게 오늘 하루 분량은 마무리,

 

+ 추가로 오늘은 스승님께 제네릭에 대한 기초적인 개념을 배웠다.

내가 플레이어 코드를 보면서 오.. 이게 뭐지 했던 부분에 대해 어떤식으로 되어있는지와 왜 이런 구조를 사용했는지에 대해 알게되었고 이제는 내가 작성하는데 무리는 있지만 작성된 코드를 보면서 어느정도는(아마) 이해할 수 있게 된것 같다.

 

+ 제발 컨디션관리  제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리 제발 컨디션관리