1 분 소요

Intro

이번 포스팅에서는 플레이어가 재화를 벌어들이고 성장할 수 있는 던전을 구성하고

던전의 진행율을 관리할 클래스를 만들어보려고합니다.

씬 이동시 발생하는 문제점

던전씬에는 현재 아무것도 없는상태이며 씬 변경시에는 현재 씬에있던 오브젝트들은 파괴되므로

함께 넘어가야할(유지되어야할) 것들은 DontDestroyOnLoad()를 통해 씬이 변경되어도 유지시켜주어야합니다.

  1. 플레이어
    • 플레이어는 가진 정보가 많으며, 새로운 씬에서 생성하는것보다는 유지되는것이 좋습니다.
  2. Managers
    • Manager 클래스들은 싱글톤으로 작성되어 있으므로 유지되어야합니다.
  3. UI
    • 고정적인 UI들(플레이어 체력, 인벤토리, 정보창 등)은 유지되어야합니다.
  4. Camera
    • 플레이어를 비추고있던 카메라도 함께 유지되도록 했습니다.

객체가 DontDestroyOnLoad()를 통해 씬변경간에 유지가되면, 로딩씬에서도 활성화되어있는 상태가 됩니다.

그러면 UI같은 부분은 로딩씬과 겹쳐보일수도 있으며 몇몇 오브젝트는 비활성화 되어있어야 되는것이 있을 수 있습니다.

해결하기 위해서는,

  • 씬 이동간에는 DontDestroyOnLoad()를 통해 유지된 객체들을 비활성화

  • 로딩씬의 Canvas의 우선순위를 높게

등의 방법이 있습니다.


저는 굳이 비활성화 시켜야할 것들은 없었기 때문에 로딩씬의 Canvas의 우선순위를 높이는 방법으로 로딩중엔 로딩씬만 보이도록 했습니다.

던전씬 구성

image

던전에는 세마리의 일반몬스터가 있으며, 세마리의 몬스터를 모두 처치할 경우 보스몬스터가 등장하도록 했습니다.

보스몬스터 등장시에는 컷씬이 출력되도록 할것입니다.


던전의 진행도를 관리할 클래스 DungeonManager 를 두었습니다.

/*
                * 던전 진행도
                * 몬스터 소환
 */
public class DungeonManager : Singleton<DungeonManager>
{
    [SerializeField] private GameObject startingPoint;              // 플레이어 시작 위치
    [SerializeField] private GameObject[] monsters;                 

    private void Start()
    {
        // 플레이어 위치 설정
        GameManager.Instance.player.transform.position = startingPoint.transform.position;
        GameManager.Instance.player.transform.rotation = Quaternion.identity;

        Spawn();
    }

    // 몬스터 스폰
    private void Spawn()
    {
        for(int i = 0;i<monsters.Length;i++)
        {
            monsters[i].SetActive(true);
        }
    }
}

  • 씬 입장시 플레이어가 startingPoint에 위치하도록 했습니다.

  • 몬스터를 소환하는 방식은, 미리 비활성화 되어있는 몬스터 오브젝트를 활성화시키는 방식으로 했습니다.

    • 던전은 계속해서 몬스터를 소환하는것이 아닌 1회만 몬스터를 소환하면 되기때문

시네머신 카메라 사용

카메라를 더이상 스크립트를 통해 조작하지 않도록했습니다.

더 부드럽고 조작하기 편한 시네머신 카메라를 사용하였습니다.

패키지 매니저에서 시네머신을 다운로드 받고, 하이어라키에 Cinemachine - Virtual Camera를 추가합니다.

image


자동으로 Main Camera 에 CinemachineBrain 컴포넌트가 추가됩니다.

이전의 카메라와 동일한 쿼터뷰를 만들기 위해서

설정값을 아래와같이 해주었습니다.

image

  • Follow - 플레이어
  • Look At - None
  • Body - Transposer
    • Blending Mode : World Space
    • Follow Offset : 적절히 조절
    • X,Y,Z Damping : 0
  • Aim - None

image

댓글남기기