[Unreal] C++로 기본 플레이어 제작

Doorbals·2023년 1월 11일
0

Unreal

목록 보기
10/10

1. 플레이어 클래스 생성

1) C++ Classes 폴더 선택한 상태에서 Add/Import - New C++ Class 선택하고 Pawn 클래스 상속 받아 새로운 C++ Class 생성

2) 플레이어의 외형 및 충돌 영역 설정을 위한 컴포넌트 추가 (콜라이더 및 매쉬)

  • 헤더 파일에 UBoxComponent와 UStaticMeshComponent 클래스를 할당하기 위한 포인터 변수 선언

  • 컴포넌트 클래스들을 사용하기 위해 소스 파일에 먼저 해당 클래스들을 include 해준다.

  • 소스 파일의 기본값 설정 부분(APlayerPawn)에서 컴포넌트를 생성해서 각 포인트 변수에 할당해준다.
    • CreateDefaultSubobject<클래스 이름>(TEXT("컴포넌트 별명")) : 액터에 컴포넌트 추가
    • SetRootComponent(컴포넌트 변수) : 해당 컴포넌트를 최상단 컴포넌트로 지정
    • 컴포넌트 변수 1->SetUpAttachment(컴포넌트 변수 2) : 변수 1을 변수 2의 자식 컴포넌트로 지정
    • SetBoxExtent(FVector 변수) : FVector 크기로 BoxComponent의 Box Extent 설정
    • ❗클래스 포인터 변수는 변수 안에 값이 들어있는 것이 아니라 실제 오브젝트를 참조.
      • CreateDefaultSubobject<UBoxComponent>()로 BoxComponent 타입의 오브젝트가 생성되고, 포인터 변수인 boxComp는 이 오브젝트를 가리켜 클래스를 참조한다.

✔️ int 포인터와 비교

int a = 3;
int* b = &a;
*b = 3;

UBoxComponent object = 오브젝트에 달린 UBoxComponent 클래스;
class UBoxComponent* boxComp = &object;
*UBoxComponent = 오브젝트에 달린 UBoxComponent 클래스

이런 느낌이라고 보면 될 듯?

❗ 소스 파일 내의 기본 함수 실행 순서
: APlayerPawn == 클래스이름(기본값 설정) -> BeginPlay(시작할 때) -> Tick(프레임마다)


2. 플레이어 이동 조작

1) Project Settings -> Input에서 Axis로 키 입력을 바인딩한다.
2) 헤더 파일에 키 입력 값을 받을 변수 및 입력 값을 처리할 함수를 선언한다.

3) 소스 파일에서 함수를 구현한다.(입력 값을 받아서 변수에 넣는다.)

4) Pawn이나 Character 클래스를 상속 받는 클래스를 생성하면 SetUpPlayerInputComponent() 함수가 자동으로 구현되어 있음. 이 함수가 언리얼 엔진 시스템에서 입력 값을 함수에 넘겨주는 역할을 한다. 이 함수의 매개변수인 PlayerInputComponent 변수의 멤버 함수인 BindAxis를 사용해 바인딩 되어있는 Axis 입력을 사용자가 만든 함수(== MoveHorizontal, MoveVertical)에 연결한다.

  • BindAxis(연결할 Axis 이름, 연결할 함수가 있는 클래스, 연결할 함수의 주소)

5) 소스 파일의 Tick() 함수에서 프레임 단위로 액터의 위치를 변경한다.

  • 이동할 방향 벡터를 만든다. (FVector dir = FVector(0, h, v))
    • x축 : 앞뒤 / y축 : 좌우 / z축 : 상하 -> h는 가로축 / v는 세로축이므로 y축에 h, z축에 v 지정
  • 방향 벡터 길이가 1이 되도록 정규화한다. (dir.Normalize())
    • 정규화 하지 않으면 상하좌우 벡터가 1일 때 대각선 벡터가 √2이므로 대각선 방향으로 이동할 때 속도가 더 빨라지는 현상 발생. 이를 방지하기 위해 정규화 한다.
  • P = P0 + vt 공식 (이동 위치 = 현재 위치 + 속도 * 시간) 사용해 액터의 위치 갱신
    • GetActorRocation() : 액터의 현재 좌표 반환
    • SetActorRocation(FVector) : 인수로 들어온 Fvector 위치로 액터의 좌표 변경
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글