GitHub : https://github.com/developeSHG/UE5-Paper2D/commit/7d8ab14d95aa0fee34610ee34d6f6fc68d886698
리스폰에 대한 기능을 만들면서 Component도 알아보자.
여태 여러가지 구조 방식에 대해 익혔다. 데이터를 일반적으로 게임 모드에서 들고 있어도 되고, 아니면 레벨 블루프린트에서 들고 있어도 되고, 그 다음 게임 인스턴스에 이 모든 레벨 별로 종속적인 것이 아닌, 레벨을 넘어가더러도 살아있는 데이터는 게임 인스턴스에다 넣는 것을 고려할 수 있다.
그 다음 알아보고 싶은게 여태 만든 Creature 블루프린트의 클래스를 작업 방식을 보면 함수가 아래처럼 한도 끝도 없이 늘어나고 있다.
언리얼과 유니티를 비교하면 유니티의 경우는 모든 것들이 다 컴포넌트 위주로 돌아간다. 그렇기 때문에 기본적인 게임 오브젝트라는 빈 깡통이 있고, 거기에 사용자가 이리저리 부품을 끼워넣는 개념이다.
언리얼은 상속 구조가 굉장히 중요하다. 어떤 액터라는 애가 인게임에 배치할 수 있는 거였고, 그 다음 상속 구조를 받아서 새로운 블루프린트 클래스를 만들어 준 다음에 그것을 다시 인게임에 배치하건 스폰을 하건 사용했었다.
그렇다고 언리얼 엔진에서 컴포넌트가 없는 것은 아니다. 이런 것들이 다 부품이라고 할 수 있다.
위에 처럼 여태 작업했던 코드가 앞으로 너무 많아지게 되면 언젠간 깔끔하게 분류해서 관리하는 것이 유용할 수가 있다. 예를 들면, Character Movement라는 컴포넌트가 있다. 언리얼 엔진에서는 기본적으로 캐릭터를 만들어 줄 때, 이동과 관련된 부분들을 Movement 컴포넌트라는 것을 관리한다.
마찬가지로, Stat과 관련된 모든 부분들을 Stat 컴포넌트라는 것을 파서 그 안에서 관리하게끔 유도를 해주면 쉽게 관리할 수 있다.
추후 혹시라도 게임을 발전시켜 인벤토리 등의 기능이 추가된다고 해도 인벤토리 기능을 변수나 함수에 섞어서 늘리기보다는 하나의 컴포넌트로 빼서 관리하는 것이 합리적이다.
(물론 인벤토리는 어디서 관리할지 사양에 따라 다름. 만약, 플레이어마다 자기 자신의 인벤토리를 하나씩 갖고 있는 컨셉의 게임이면 상위 클래스에 인벤토리를 배치하는 것도 방법임.)
Custom Component를 만들어보자.
만들 기능은 스포닝 풀. (몬스터 수가 일정 숫자 이하로 내려가면 다시 생성해주는 리스폰 기능)
액터 컴포넌트는 어떠한 액터건 붙을 수 있고, 재사용이 가능하다.
씬 컴포넌트는 액터 컴포넌트를 상속받고 조금 더 확장되어 실제로 배치할 수 있다는 차이가 있다.
선 기반으로 아래는 Actor Component고 위는 Scene Component다.
씬 컴포넌트는 트랜스폼이 있기 때문에, 드래그 드롭해서 상속 구조, 계층 구조로 밀어넣을 수 있다는 차이가 있고, 액터 컴포넌트는 딱히 좌표 개념이 없기 때문에 존재만 한다. 캐릭터 무브먼트 같은 게 전형적인 액터 컴포넌트다. 그것 외에는 딱히 차이가 없다.
Tile Map도 시작하면 배치되는 액터이기 때문에 기능을 넣어줄 수 있다 Tile Map 클래스안에 스포닝풀 클래스를 기능으로 추가했다.
스포닝 풀이 타일맵에 기생해서 동작하고 있지만, 이렇게 직접적으로 Add 버튼을 눌러서 툴로 추가했어도 되고 아니면 컴포넌트를 코드로 추가해줄 수도 있다.
현재 TileMap이 스포닝풀 이라는 컴포넌트를 들고 있는 것이기 때문에, TileMap 코드에서 언제든지 Get Component 라는 기능을 이용해 들고 있는 컴포넌트를 찾을 수 있다.
아니면 거꾸로, 스포닝 풀에서 타일 맵을 알아야 될 수도 있다. 이때는 Get Owner 라는 함수를 이용하면 된다.
몬스터 카운트를 관리하다 일정 숫자로 내려가면 다시 스폰을 해야하는데 스폰하는 기능이 TileMap에 넣어놨기 때문에, 어찌됐건 이 타일맵을 알긴 알아야 된다. 스포닝풀 컴포넌트는 자신을 추가한 곳에서 Get Owner 를 이용해 주인님을 알 수 있고, 그걸 이용해 (cast to 만든 클래스) 를 하면 된다.
'UE5 : Paper 2D (Blueprint) > 구조와 설계' 카테고리의 다른 글
[UE5 : Paper2D(BP) - 구조와 설계] Chapter 02. UI와 HUD (0) | 2024.01.25 |
---|---|
[UE5 : Paper2D(BP) - 구조와 설계] Chapter 01. 매니저 (0) | 2024.01.25 |
댓글