WinCNT

GamePlay Framework 본문

게임 프로그래밍(학습 내용 정리)/Unreal

GamePlay Framework

WinCNT_SSS 2021. 12. 16. 18:27

GamePlay Framework 요약

  • 활용을 하기위해서는 관련 클래스와 내부 이벤트를 알아야한다.
  • 블루 프린트 라이브러리 함수는 어느 곳이든 호출가능
  • 새로운 액터가 필요하다면 블루 프린트 클래스 or C++상속
  • 새로운 컴포넌트 필요하다면 블루 프린트 클래스 or C++상속
  • 게임 플레이를 만든다 = 컴포넌트의 조합으로 액터를 만들기 + 이벤트를 처리

GamePlay Framework란?

엔진이 게임 플레이에 대하여 설계한 클래스와 노드
이를 활용(상속,함수재정의,이벤트 바인딩)하여 게임플레이를 구현할 수있다.

이벤트 바인딩
이벤트 바인딩이 되면, 따로 클래스 상속 없이, 이미 인스턴스 안에 있는 것에 포인터를 등록해서
함수를 호출하게 해줌

 

언리얼 클래스
Level - 경기장
GameMode - 레벨마다 하나씩 지정할 수 있음()
Pawn - Controller
GameState/PlayerState
TriggerBox
PlayerStart

GamePlay Framework의 활용

1. 상속 – 새로운 클래스를 만들기 위해 부모 클래스의 특성을 받고  멤버 변수(컴포넌트 추가)나 멤버 함수를 추가한다.
2. 함수 재정의 - 부모 클래스에서 정의한 함수를 다시 정의한다.
3. 이벤트 바인딩 – 콜백함수를 등록하는 개념으로 상속을 하지 않고도 사용할 수 있다. 이벤트가 발생 했을 때 호출 해준다.
4. 어디서든지 블루 프린트 함수 라이브러리 를 사용할 수 있다.

GameMode

면접 때 주로 물어볼 정도로 중요한 내용!!

중요한 내용은 서버에서 관리하거나 함

레벨과 분리된 게임 규칙(플레이어 스폰, 참여 인원 등)을 정의

Level의 게임모드 설정 없으면 프로젝트 Default 세팅 게임 모드를 사용한다

Pawn – Controller

Pawn은 외형 , Controller는 의지를 갖는 뇌(??)에 해당한다

(둘 다 Actor이므로 각각 방향과 위치를 갖을 수 있다)

Unreal에서의 Pawn과 컨드롤러

 

조종할 외형을 선택하는 것 을 Possess (빙의)라고 표현

예) 플레이어가 자동차를 타는 등등

Pawn - DefaultPawn - Character

Pawn은 Controller의 Possess 대상 기능만 갖는 Actor

DefaultPawn은 StaticMesh,ShpereCollision,Movement를 소유하여 네비게이션 활용하여 움직일수 있는 최소한의 기능을 갖는 Pawn

Character는 SkeletalMesh,CapsuleCollision,CharacterMovement 를 소유하여 네비게이션 활용으로 인간형 움직임을 할 수 있는 Pawn

GameInstance

  • 엔진이 시작될때 생성하는 오브젝트  
  • Actor가 아니므로 레벨이 전환되도 사라지지 않는다.
    ※ 레벨이 바뀔 때마다 Actor들은 초기화된다
  • 프로젝트 세팅에서 상속받은 클래스를 설정한다.
  • 블루프린트 어디서든지GetGameInstance 노드로 사용 가능하다.

Actor

Map에 배치할 수 있는 최소의 단위

UObject (언리얼 오브젝트)를 상속

Level 안에 드래그해서 배치하거나 동적으로 SpawnActor/DestroyActor로 할당할 수 있다

자신의 기능을 나타내는 ActorComponent 를 소유(인스턴스 참조)

Actor 관련 이벤트

이벤트 설명
BeginPlay 게임이 시작 될 때 또는 Spawn 이후
EndPlay 게임이 종료 될 때  또는 Destroy 이후
Tick 매 프레임 업데이트 하기위해 호출됨
AnyDamage TakeDamage노드의 대상이 될 때 호출됨
ActorBeginOverlap 소유한 컬리전 컴포넌트가 Overlap Begin일 때
ActorEndOverlap 소유한 컬리전 컴포넌트가 Overlap End일 때
Hit 소유한 컬리전 컴포넌트가 Block일 때
ConstructionScript (Class Blueprint) 월드에 Spawn되거나,배치되거나,속성이 바뀔 호출

ActorComponent

  • Actor에 추가되어 Actor의 특징을 구성하는 요소가 된다
    예) 메쉬 렌더링 , 이동 계산  , 충돌  , AI , 입력 , 카메라

 

ActorComponent Class Diagram과 주로 사용하는 Actor Component(빨간 동그라미)

Actor , ActorComponent 관련 함수

함수 설명
SpawnActorFromClass 액터 Spawn
DestroyActor 액터 Destroy
GetAttachParentActor 자신의 부모 Actor 얻기
GetAttachedActors 자신의 자식들 액터 목록 얻기
GetComponent(s)ByClass 액터가 소유한 컴포넌트 얻기
GetAllActors 월드에서 ClassTag 기준으로 액터 목록 구하기
GetActorOfClass 월드에서 Class액터를 찾아 첫번째 액터 구하기

추천 과제: Score 기록

리스폰 처리(C++)

추천 과제: 캐릭터의 리스폰을 막는 리스폰 처리

레벨에는 무한 낙하을 막는 Destroy 월드 Z 세팅이 존재한다

데미지 시스템

데미지 시스템 요약

  • Causer Actor 에서 ApplyDamage함수를 사용하며 Instigator , Causer가 다를 수 있다.
  • Damaged Actor에서 AnyDamage 이벤트는 항상 일어난다.
  • 데미지의 HP처리는 여러 Actor에서 자주 사용하기때문에  재활용 가능한 액터 컴포넌트나 상속을 사용한다. 

선동자와 유발자(다를 수도 있고 같을 수도 있다)

데미지 시스템 데미지 처리 이벤트

ApplyDamage  ->  AnyDamageEvent
ApplyPointDamage -> PointDamageEvent 이후 AnyDamageEvent
ApplyRadialDamage -> RadialDamageEvent 이후 AnyDamageEvent

 

위의 함수들을 이용하하면 컴포넌트를 안 쓰고 다중 상속 등으로도 데미지 시스템을 구현할 수 있다

하지만 프로그래머가 아닌 다른 팀(예를 들어 기획이라거나)도

Unreal를 통해 간편히 데미지 시스템을 이용하고 싶을 때는 컴포넌트가 편리하다

 

특정 액터에서 「+컴포넌트 추가」 버튼으로 컴포넌트를 추가할 수 있다

SSS

'게임 프로그래밍(학습 내용 정리) > Unreal' 카테고리의 다른 글

GUI - UMG(UnrealMotionGraphics)  (0) 2022.01.20
액터 통신  (0) 2022.01.13
캐릭터 셋업  (0) 2022.01.06
제 3강. 컬리전 시스템  (0) 2021.12.30
언리얼 소개 및 블루 프린트  (0) 2021.12.09