본문 바로가기

Unreal

[03] Pawn C++ Class

언리얼 웨비나를 따라한 것을 정리하기 전에, 개인적으로 만들어보고 싶은 것을 먼저 정리하자. 

 

원하는 것은, 미리 입력해놓은 이동 동선에 따라서 자동으로 움직이는 NPC 유닛.

이 NPC가 다른 진영의 NPC와 만나면 서로 전투를 시행하고, 전투가 끝나면 다시 이동시키고 싶다.

그럼 어떤 유닛이던간에 그 틀이 될 C++ 클래스를 하나 만들어야 하는데, '없음'과 '캐릭터', '폰', '액터' 등의 부모 클래스가 있다.

 

간략하게 설명하면 움직일 일이 없는, 간단하게 월드에 배치할 오브젝트는 Actor, 조작가능한 오브젝트와 간단한 이동을 하는 오브젝트는 Pawn, 플레이어가 직접 움직이는, 인간형 캐릭터에 주로 사용되는 것이 Character이다.

 

Actor > Pawn > Character 순서대로 상속받는데(Pawn의 부모가 Actor), 원하는 것이 움직이는 NPC니까 여기서는 Pawn을 상속받아서 사용해보자.

만들게되면 헤더파일 하나와 cpp파일 하나가 생겨난다.

기본적으로 생성된 것들은 Pawn으로 생성해서 생겨난 것들이니 건들지 말고, 원하는 기능만 추가로 작성하자. 

 

개인적으로 생각하는 먼저 구현해야 할 것은 외형과 능력치.

아직 이 unit Class에는 외형이 들어갈 칸이 없으므로, 하나 만들어주도록 한다.

이후 이 Unit C++ 클래스에서 파생된 블루프린트의 컴퍼넌트 칸에는 Static Mesh (일단은 간단하게 하기 위해서) 를 집어넣을 수 있는 칸이 생길 것이다.

 

겸사겸사 FloatingPawnMovement도 같이 넣어주자. 나중에 간단히 경로를 따라 움직임을 설정해볼 생각이다.

(왜 Floating인지 몰랐는데, 해보니까 중력의 영향을 안받았다. 다른걸로 바꾸는 편이 나을 것 같다!)

 

그럼 이제 유닛 클래스에 스탯을 넣고, 블루프린트에서 읽어오는 작업을 할 시간이다.

UFUNCTION(BlueprintCallable, Category = "스탯")
float GetHP(){return HP;}
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "스탯케이스1", meta = (AllowPrivateAccess = "true"))
FStatStruct Stats;

여기서는 두 가지 방법을 고민했다. 하나는 private로 스탯을 선언하고 get, set을 사용해서 원하는 스탯을 하나씩 읽어올 수 있게 하는 방식이고, 다른 하나는 아예 구조체를 하나 별도로 선언하는 것이다.

그럼 원했던 모습인 블루프린트에서 하나의 노드로 받아서 쓰기가 가능해졌다. 다른 방법도 있겠지만, 눈에 보기에는 이 방법이 제일 편한 것 같았다. 그래서 따로 구조체 파일을 만들고, 앞으로 구조체를 쓸 일이 있으면 이 헤더파일에 몰아서 적기로 했다.

USTRUCT(BlueprintType)
struct FStatStruct{...}

앞으로 구조체를 사용할 일이 있으면 Structs.h 헤더파일에 작성한 이후 가져오면 된다. 지금은 스탯에 대해서만 사용된다.

 

이렇게 만든 Unit Class을 이용해서 블루프린트를 제작한다. 그 후 월드에 배치하면 되는데, 지금은 모델링을 따로 구하지 않았으니까 임시로 큐브 형태에 그림을 덧씌워서 제작해주자.

이렇게 만들어서 월드에 배치후, 각각의 스탯을 Log로 출력하게 해서 확인해보면 블루프린트에서 개별적으로 Stat이 잘 들어간 것이 확인된다.

 

다음에는 이 유닛을 배치할 방을 만들어보자.

'Unreal' 카테고리의 다른 글

[06] 프로젝트 공유랑 방향  (0) 2024.11.20
[05] Unreal Singleton/Get Actor of Class  (2) 2024.09.04
[04] Actor Spawn, Algo/Sort  (0) 2024.08.15
[02] Unreal Engine Learning  (1) 2024.05.16
[01] Unreal Engine Learning  (0) 2024.05.01