공부/Unreal

24.07.10

월러비 2024. 7. 12. 14:34

복습

  • 크리에이트디폴트 서브오브젝트 → 액터 클래스에 정의되어있다.
    • CHelpers는 액터가 상속되지않았기 때문에 매개변수로 받는 액터클래스에서 함수로 접근한다.
  • char (문자) → CHAR* (문자열) → Ascii → 1Byte → “…”로 표현
  • wchar → wCHAR* → MBCS → 1 또는 2Byte → L”…”로 표현
  • tchar → TCHAR* → Unicode로 표현 → 2Byte → TEXT(”…”)
  • 문자열 표현 방법
    • FText : UI같은 곳에서 문자열을 보여주기 위해 사용한다.
    • FString : 문자열을 다루기 위해 사용한다.
    • FName : 대’소문자 구분 없이 이름을 표기하기 위해 사용한다.
    • 서로rks에 상호 바꾸기가 가능하다.
  • 자료형을 생성하고 반환하기 위해 2차포인터로 반환한다.
    • T** OutComponent → *OutComponent = InActor→CreateDefaultSubobject<T>(InName);
  • SetRootComponent는 외부에서도 부모를 설정할 수 있게하는 함수다.
    • RootComponent는 Protected다.

컴포넌트 생성 순서

  • 액터 클래스의 ‘오브젝트 생성 함수’를 ‘설정함 자료형’과 ‘설정한 이름’으로 호출 - 부모 컴포넌트로 붙일거면 붙이고 아니면 ‘루트 컴포넌트’로 붙인다.

에셋 가져오는 순서

  • ‘오브젝트 탐색 함수’를 ‘설정한 자료형’과 ‘변수(설정한 경로)’ 를 넣어 호출한다. - 변수에 저장된 오브젝트를 설정한 자료형의 변수에 넣는다.

디폴트 게임 모드 지정 - ACGameMode로 이름 변경

  • 프로젝트 세팅 - 맵 & 모드 - AGameModeBase라는 파일을 넣는다. - 디폴트 폰 클래스에 플레이어 클래스로 선택한다.
  • ‘클래스 탐색 함수’에 ‘폰 액터 자료형’과 ‘플레이어 블루프린트 클래스_C’를 넣어 호출한다.
    • 이후에, 더 편하게 쓰기 위해 GetClass 함수로 호출했다.
    //함수 정의
    template<typename T>
    static void GetClass(TSubclassOf<T>* OutClass, FString InPath)
    {
    	ConstructorHelpers::FClassFinder<T> asset(*InPath);
    
    	*OutClass = asset.Class;
    }
    
    //함수 사용
    CHelpers::GetClass<APawn>(&DefaultPawnClass, "Blueprint'/Game/BP_CPlayer.BP_CPlayer_C'");
    

언리얼 회전 구조체

  • FRotator → P, Y, R (대부분 이걸 사용한다.)
  • FQuat → x, y, z, w (가끔 이걸 사용한다.)
  • FRotateMatrix → 3 * 3 회전 행렬
  • FMatrix 3*3
  • FMatrix → 4 * 4 행렬 (위치, 회전, 크기)

CPlayer

스켈레탈 메쉬 가져오기

  • FString 매개변수를 사용하면 * 포인터를 붙여야한다.

컴포넌트 디테일 기본값 설정

  • 작성하고 값이 변하지 않았거나, 기본값 변경 버튼이 뜨지 않았을 경우 : 핫 리로드를 해준다.
  • 프로젝트 세팅 - 맵 & 모드 - 기본 클래스 : BP_Player로 설정해야한다.
  • 플레이어 스타트 액터 : 플레이어 액터가 소환되는 지점 액터를 생성한다.

좌표값 이동

축 입력 이벤트

애니메이션

  • 원래 블루프린트 만드는것처럼 콘텐츠 브라우저에서 만든다.
    • 단, 부모 클래스를 C로 만든 애니메이션 인스턴스 클래스로 지정한다.
  • 부모를 잘못 선택한 경우 : 파일 - 블루프린트 부모변경

시작

애니메이션 인스턴스

애니메이션 인스턴스 블루프린트 생성

  • 기존 애니메이션 블루프린트 생성처럼 진행 - 스켈레톤 : 애니메이션에 사용할 스켈레톤, 부모 클래스 : 애니메이션 인스턴스 C++ 클래스

애니메이션 인스턴스 C++ 생성

  • C++ 클래스 추가 - 모든 클래스 - ‘AnimInstance’ 검색

코드로 플레이어 파일에서 애니메이션 인스턴스에 애님클래스(BP_Player) 지정하기

  • ‘클래스타입’ 즉, ‘자료형’을 변수로 다룰때눈 ‘TSubclassOf<자료형>’ 자료형을 사용한다.
    • TSubclassOf<자료형> 자체에는 ‘포인터’ 하나가 이미 내장되어있다.
    • TSubclassOf<자료형>* 로 자료형을 지정하면 기본 ‘2차 포인터’로 지정된다.
  • 포인터 자료형을 사용할때 ‘클래스를 지정’하는 것을 ‘상속제한’ 이라고 한다.
    • 매개변수로 받을 자료형을 제한할떄 사용했다.
  • FString 자료형이라도 매개변수로 넣을때는 ‘L’을 쓰지 않는것같다.
  • ‘애님인스턴스’ 자료형의 변수 선언 - ‘클래스 가져오기’ 함수를 ‘클래스 자료형’ 변수와 ‘애니메이션 인스턴스 블루프린트’ 경로를 지정해서 호출한다. - ‘메쉬 반환 함수’에 있는 ‘애님 클래스 세팅 함수’를 ‘애님 인스턴스’ 자료형 변수를 넣어 호출한다.
//클래스 자료형 변수 생성
	TSubclassOf<UCAnimInstance> animInstance; //애님 인스턴스 자료형 클래스 생성
//반드시 _C를 붙여야한다.
CHelpers::GetClass<UCAnimInstance>(&animInstance, "AnimBlueprint'/Game/ABP_CPlayer.ABP_CPlayer_C'");
GetMesh()->SetAnimClass(animInstance);

 

  • #define CHECK_NULL(함수 a) < if(a == nullptr) { return; } 을 작성한다고 가정한다.
    • if(OwnerCharacter == nullptr) { return; }
    • CHECK_NULL(OwnerCharacter); ⇒ 위의 if문과 같은 결과가 나온다.
      • ‘매크로 함수’ 라고 한다.
      • 쓰면 위험한게 있다고 한다.
      • 만들어서 쓸 수 있다.
  • 블루프린트 클래스도 C++ 클래스에서 파생된 ‘자식 클래스’다.
    • 즉, 애니메이션 인스턴스 C++ 클래스에서 생성한 변수를 파생된 블루프린트 클래스에서 사용하기 위해서는 접근 지정자를 ‘Protected’로 해줘야한다.

블루프린트 함수의 C++ 함수를 찾는법

  • 블루프린트 함수와 매칭되는 C++ 함수는 ‘Native’ 라는 글자가 붙는다.
  • 보통 블루프린트 함수를 찾았을때 바로 위에 있는 함수가 블루프린트 함수의 C++ 함수다.
  • 해당 함수를 사용할 클래스의 상속자 f12 - 블루프린트 함수 검색 - 찾는 함수가 있다면 ‘cpp파일’로 넘어간다 - 블루프린트 함수 검색 - 발견하면 어떤 상황에서 함수가 작동하는지 함수 포함 관계에서 알 수 있다. - C++ 함수를 찾아서 복사한다. - ‘헤더 파일’로 넘어가서 복사한 함수를 검색한다. - 가상화 함수인지 확인한다. - 반환형 ‘ 함수명 ‘ (매개변수) 까지 복사한다. - 함수 포함 관계를 확인해서 함수의 접근자를 확인한다. - 함수를 넣을 곳에 복사하고, 가상화 함수였다면 ‘override’를 뒤에 붙여준다.
//블프에서 플레이어 없으면 가져오는 함수다.
void NativeBeginPlay() override;

//BlueprintUpdateAnimation의 c 함수다.
void NativeUpdateAnimation(float DeltaSeconds) override;

애니메이션

빠른 조건 확인을 위해 ‘헤더 파일’에 ‘메크로 함수’ 정의

#define CheckTrue(x) { if(x == true) return; } //참 확인 매크로 함수
#define CheckTrueResult(x, y) { if(x == true) return y; } //참값 확인 매크로 함수

#define CheckFalse(x) { if(x == false) return; } //거짓 확인 매크로 함수
#define CheckFalseResult(x, y) { if(x == false) return y;} //거짓값 확인 매크로 함수

#define CheckNull(x) { if (x == nullptr){ return; } } //null 확인 매크로 함수
#define CheckNullResult(x, y) { if(x == nullptr) return y;} //Null 값 확인 매크로 함수

애니메이션 폰 가져와서 플레이어로 형변환

  • 시작시 폰 가져오고 - 폰이 플레이어로 유효하다면 실행하지만, 유효하지 않다면 플레이어로 형변환한다.
  • 헤더 빠르게 찾는법 ; 헤더 넣을 자료형 f12 - 다른이름으로 저장 - class 이후가 헤더 경로다.
  • C++ 가상화 부모 클래스 함수 키워드 : Super
    • Super::NativeBeginPlay()
  • 애니메이션 인스턴스 헤더 파일 - ‘캐릭터 자료형’ 변수 선언 - 애니메이션 인스턴스 cpp 파일 - include 추가 - 함수 정의 - override이니 ‘Super’ 키워드를 사용한다. - 함수 정의 - Update는 ‘에디터’ 상에서도 작동하기 때문에 ‘Null’ 체크는 반드시 미리 해줘야한다.
//cpp 파일
OwnerCharacter = Cast<ACharacter>(TryGetPawnOwner());

CheckNull(OwnerCharacter); //if문을 '매크로 함수'로 줄인것이다.

속도 지정

  • 캐릭터 - 속도 가져와서 - XY의 길이를 속도에 넣는다.
  • 헤더 파일 - 속도 변수를 ‘블루프린트 읽기 및 에디터 상 어디서나 사용 메크로’와 ‘카테고리’를 지정해서 선언한다. - ‘가져온 캐릭터 변수’에서 ‘속도 가져오기’함수에서 ‘평면 크기’ 함수를 속도에 저장한다.
//header
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Animation")
		float Speed;

//cpp
Speed = OwnerCharacter->GetVelocity().Size2D();

달리기 키 지정

  • 블프에서 변수 명 확인하는 법 ; 블루프린트 파일 - 원하는 기능에서 마우스 대기 - 이름 확인
  • 헤더 파일 - 달리기 이벤트 함수 선언(눌렀을때, 땠을때) - cpp 파일 - 액션 매핑 입력 정의 - 헤더파일 선언 함수 드래그 후 ‘Ctrl + .’ 후 ‘선언 / 정의 만들기’ 클릭 - include 추가 - ‘캐릭터 무브먼트 가져오기’ 함수의 ‘최대 걷기 속도’ 변수에 값을 정의한다.
//header
void OnRun();
void OffRun();

//cpp
//달리기 이벤트
PlayerInputComponent->BindAction("Run", EInputEvent::IE_Pressed, this, &ACPlayer::OnRun);
PlayerInputComponent->BindAction("Run", EInputEvent::IE_Released, this, &ACPlayer::OffRun);

GetCharacterMovement()->MaxWalkSpeed = 600;

캐릭터 회전과 카메라 회전

  • cpp 파일 - ‘요 카메라 회전’ 변수 거짓설정 - ‘캐릭터 무브먼트 가져오기’ 함수의 ‘캐릭터 움직임 회전’ 변수 참 설정 - 걷기 속도 설정
//카메라 요 회전 정지
bUseControllerRotationYaw = false;
//캐릭터 무브먼트 디테일 설정
GetCharacterMovement()->bOrientRotationToMovement = true;
GetCharacterMovement()->MaxWalkSpeed = 400;

C++ 함수 모음

  • TSubclassOf<자료형> : ‘클래스타입’ 즉, ‘자료형’을 변수로 다룰때 사용하는 자료형이다.
    • 즉, UClass 모든 클래스를 다루는 자료형에서 특정 자료형만 쓰기 위해 제한해서 사용하는 것이다.
    • UClass* < - > TSubclassOf<자료형>* : 서로서로 변환이 가능하다.
    • 맵 & 모드에 넣을 CGameMode에서 ‘BP_Player’를 지정할때 사용했다.
    • 플레이어 블루프린트의 ‘애님클래스’에 ‘애니메이션 인스턴스 클래스’ 파일을 지정하기 위해 사용했다.

애니메이션 관련 함수

  • NativeBeginPlay() override : 블루프린트 BeginPlay 함수다.
  • NativUpdateAinmation(float DeltaSeconds) override : 블루프린트 업데이트 애니메이션 함수다.
    • 이 함수는 게임 실행 중 뿐만 아니라 ‘에디터’ 상에서도 작동하기 때문에 ‘Null’ 체크를 반드시 해줘야한다.
  • TryGetPawnOwner() : 애니메이션의 폰을 가지고 있는 주체를 가져오는 함수다.
  • GetVelocity() : 캐릭터의 속도를 가져오는 함수다.
    • Size2D() : 2D 평면의 속도값을 가져오는 함수다.
    • Size() : 3D 공간의 속도 값을 가져오는 함수다.
  • UInputComponent : 폰의 입력을 담당하는 자료형이다.
    • BindAxis(축 매핑 이름, 입력 받을 주체, 발생할 이벤트) : 축 이벤트 발생 함수다.
    • BindAction(액션 매핑 이름, 어떤 입력인지 확인하는 열거형(Pressed, Released 등), 입력 받을 주체, 발생할 이벤트) : 액션 이벤트 발생 함수다.
  • UCharacterMovementComponent : 캐릭터의 움직임을 잠당하는 자료형이다.
    • GetCharacterMovement() : 캐릭터 무브먼트를 가져오는 함수다.

블루프린트 함수 모음

  • Try Get Pawn Owner : 애니메이션의 폰을 가지고 있는 주체를 가져오는 함수다.
  • Get Velocity : 캐릭터의 속도를 가져오는 함수다.
  • Use Controller Rotation Yaw : 요 카메라 회전 사용 여부 함수다.

'공부 > Unreal' 카테고리의 다른 글

24.07.12  (0) 2024.07.15
24.07.11  (1) 2024.07.14
24.07.04  (0) 2024.07.07
24.07.03  (2) 2024.07.05
24.07.02  (1) 2024.07.03