티스토리 뷰

코드 위주의 글

 

AutoPossessPlayer = EAutoReceiveInput::Player0;

AutoPossessPlayer

레벨이 시작될 때나 폰이 생성될 때 자동으로 폰을 소유해야 하는 플레이어 컨트롤러를 결정하는 코드

 

UPROPERTY(EditAnywhere)
USceneComponent* OurVisibleComponent;

USceneComponent

Transform 정보를 가지고 있고, Actor 또는 USceneComponent간 Hierarchical Attachment를 지원.

Rendering과 Collision 기능은 가지고 있지 않다.

RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));

RootComponent

Actor는 Transform 정보를 직접 저장하지 않고

이 RootComponent의 Transform 정보를 사용한다.

자료형 : USceneComponent*

 

RootComponent는 USceneComponent * 자료형을 사용 하지만

USceneComponent의 자식 클래스인 UPrimitiveComponent에 설정을 주로한다.

 . UCapsuleComponent : 주로 Pawn의 Root로 사용. 충돌 감지에 사용되지만 렌더링 정보가 없어 그려지지 않음

 . UStaticMeshComponent / USkelatalMeshComponent : 충돌 감지 + 렌더링

UPrimitiveComponent는 collision 데이터로 사용되거나, 렌더링 geometry 를 생성하거나 담는 것이다.

 

 

CreateDefaultSubobject<T>(TEXT(" "))

Actor의 컴포넌트들은 subobject로 생성한다.

이유는 실제 레벨에서 스폰 될 때 매 Actor 객체마다 컴포넌트를 세팅하는 비용을 줄일 수 있기 때문이다.

따라서, 컴포넌트를 subobject로 생성하고 설정하는 과정은 생성자에 하는 것이 좋다.

 

OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("OurCamera"));

OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OurVisibleComponent"));

OurCamera->SetupAttachment(RootComponent);

OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f)); // 현 컴포넌트가 부모 기준으로 떨어진 위치

OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f)); // 현 컴포넌트의 회전된 상태, 부모 기준

OurVisibleComponent->SetupAttachment(RootComponent);

예제 코드대로 따라갔을 때  Pawn을 레벨에 배치 하면 카메라 컴포넌트가 보이지 않는다.

이게 근본 원인인지는 모르겠지만 class의 멤버 변수로 넣으니까 보임.

그리고 예제에서는 헤더파일을 추가하는 것을 알려주지 않는다.

따라서 아래 헤더 파일을 include 해줘야 정상적인 작동이 된다.

#include "MyPawn.h"
#include "Engine/Classes/Camera/CameraComponent.h"
#include "Engine/Classes/Components/StaticMeshComponent.h"

 

CurrentVelocity.Y = FMath::Clamp(AxisValue, -1.0f, 1.0f) * 100.0f;

FMath::Clamp

사용자의 입력으로 얻은 값을 -1 ~ 1로 제한.

문제 상황

같은 축으로 이동할 수 있는 키가 여러 개가 있는 경우, 그 키를 동시에 눌렀을 때

값이 더해져 2.0, 3.0 이렇게 나올 수 있음. 그럼 플레이어의 속력이 2배나 빨라질 수 있다.

 

float CurrentScale = OurVisibleComponent->GetComponentScale().X;

GetComponentScale()

컴포넌트의 Scale을 리턴. 월드 좌표 기준.

SetWorldScale3D로 수정 가능.

 

InputComponent->BindAction("Grow", IE_Released, this, &AMyPawn::StopGrowing);

InputComponent->BindAxis("MoveX", this, &AMyPawn::Move_XAxis);

InputComponent

액터에 대한 입력 처리 컴포넌트.

 

BindAction()

첫 매개 변수로 전달하는 이름의 Action이 동작했을 때 

이 액터에 대한 처리 함수를 Bind 하는 함수.

두 번째 매개 변수는 처리할 키 이벤트.

세 번째 매개 변수는 입력을 바인딩하는 오브젝트.

BindAxis도 키 이벤트만 없지 동일.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함