GitHub : https://github.com/developeSHG/UE5-Paper2D/commit/9e998598205aea1f4546f8c5e128486f9f3b227c
여태까지는 그냥 필요에 의해서 코드를 이리저리 붙였다.
특히나 만드는 게임 구조상 어쨌든 맵이 굉장히 중요한 역할을 하고 있고, 충돌을 담당하고 또 충돌을 하기 위해선 맵에 대한 정보뿐만 아니라 플레이어나 몬스터의 정보를 알아야하기 때문에, 타일맵 클래스에다 온갖 정보를 끼워넣었다.
개인 포폴급까지 이렇게 관리해도 상관없겠지만, 진지한 규모의 게임을 만든다고 하면 부담이 된다.
또한, Creature 클래스에 내부적으로 Get Actor Of Class 즉, 타일맵이라는 액터를 찾아서 동작하게 했는데 이런 부분도 좋지 않다.
왜냐면 타일맵이라는 건 결국엔 월드 상에 배치한 그냥 하나의 액터에 불과한데, 그것을 코드에서 찾아서 사용한다는 얘기는 필요할때마다 다른 맵으로 넘어갔다거나 하는 식으로 동작하게 만들 때, 기존 타일맵을 사용하지 않게 만들어야 하고, 모든 코드들을 직접 수정해주지 않으면 먹통이 될 수 있기 때문이다.
대부분 중앙에서 뭔가 관리하는 일종의 매니저를 두기 마련인데, 여태 프로젝트에서 사실상 매니저 역할을 했던게 타일맵 클래스였다.
그리고, 타일맵 안에서 UI를 관리하고 있는데 안좋은 방법이였다.
게임 내에 다양한 컨텐츠들 정보와 UI들이 맞물려서 동작하게 될텐데, 그것들을 연관성이 없는 타일 맵에다 UI를 관리하는 건 좋지 않다. UI도 굉장히 많아질 뿐만 아니라 UI에 해당하는 정보량도 많아질텐데 그것을 중앙에서 관리해야지만 필요할 때마다 꺼내 쓸 수 있다.
매니저는 싱글톤이나 전역 변수를 이용해서 어디서든 편리하게 접근하게끔 만드는 경우가 많은데, C++ 기준이고 블루프린트만으로 작업을 한다고 했을 때, 매니저와 어떻게 비슷한 느낌을 내느냐?
사실 블루프린트는 C++에 비해 자유도가 낮기 때문에, 그렇게 까지 할 수 없지만 기본적으로 언리얼 엔진 구조상 제공하는 게 많다.
Game Mode의 경우 단점은 레벨에 종속적이다. 그렇다는 것은 RPG처럼 로비에서 캐릭터를 선택한 다음 필드 영역으로 가는 등, 만약 새로운 레벨을 만들어서 다른 레벨로 넘어간다고 하면 세팅했던 데이터들이 날아갈 수 있다.
게임을 켜는 순간부터 유지되는 것이 있다. 정답은 Game Mode를 이용하지 않고, 하나 더 상위의 개념인 Game Instance가 있다.
사용하기 위해서, Project Settings에 가서 Map & Mode라는 부분에 Game Instance를 만들어준 클래스로 지정해야한다. 그럼 게임이 시작되었을 때, 해당 인스턴스 클래스를 사용한다.
이렇게 매번마다 캐스팅하는 것 마저도 너무 귀찮다라고 하면 방법이 없진 않다.
블루프린트 Function Library를 만들어서 사용하면 된다.
이 함수는 어떤 특정 클래스의 종속적인 함수들이 아니라 C++ 기준으로 스태틱 함수들 즉, 언제 어디서든 사용할 수 있는 함수들이기 때문에 Get Game Instance도 한 번에 사용할 수 있게끔 편리하게 관리할 수 있다.
그러면, 길게 만들 바로 Get Gmae Instance를 사용할 수 있다. 언제든지 편리하게 매니저 클래스를 사용할 수 있다.
'UE5 : Paper 2D (Blueprint) > 구조와 설계' 카테고리의 다른 글
[UE5 : Paper2D(BP) - 구조와 설계] Chapter 03. Component (0) | 2024.01.25 |
---|---|
[UE5 : Paper2D(BP) - 구조와 설계] Chapter 02. UI와 HUD (0) | 2024.01.25 |
댓글