[UE5]툰 탱크-10

칼든개구리·2024년 12월 10일
0

[언리얼TO리얼]

목록 보기
19/42

Sweeping
게임 프로그래밍에서 스윕 기능은 스윕기능이 켜져 있을 때 엔진으로 작동된다.
스윕기능은 특정한 한 프레임에서 움직일 때 두 오브젝트가 겹치는지 확인한다.
언리얼에서 스윕 기능을 사용하려면 콜리젼 기능이 활성화 되어 있어야 한다.

void ATank::Move(float Value) // 매 프레임마다 value값과 호출된다
{
	FVector DeltaLocation = FVector::ZeroVector;
	//X= Value * DeltaTime * Speed;
	DeltaLocation.X = Value * Speed * UGameplayStatics::GetWorldDeltaSeconds(this);
	AddActorLocalOffset(DeltaLocation,true); //두번째인자가 스윕(bool)
}


기대와는 달리 충돌하지 않고 벽을 통과해버린다

고쳐주기 위해서 BP_PawnTank로 들어가 루트 컴포넌트인 Capsule Comp의 디테일 창의 콜리젼 프리셋을 BlockAllDynamic으로 수정해준다

어떠한 컴포넌트든 고유한 콜리젼 오브젝트 유형이 있다. 캡슐의 경우 오브젝트 유형은 WorldDynamic으로 설정되어 있다. 콜리전 프리셋을 BlockAllDynamic으로 바꾸면 모든 콜리전 반응이 모든 콜리젼 오브젝트 유형에 블록으로 체크되어 있다. 바꾼 후 어떻게 동작하는지 보겠다.

다른 폰과 겹치기 전에 멈춘다. 수정한 BlockAllDynamic 콜리전 프리셋의 콜리전 반응은 모든 오브젝트 유형에 차단하도록 설정되어 있다.
스윕 기능은 루트 컴포넌트에 대해서만 스윕하며 블록 콜리전을 확인한다고 문서에 적혀 있으므로 다른 컴포넌트의 설정은 중요하지 않다.


충돌에 관한건 다뤘으니 이제부터 Turn을 다룬다. Turn에는 D와 A가 할당되어 있다.
Turn 축 매핑에 함수를 바인딩 하려면, 바인딩할 함수가 필요하다.

void ATank::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);
	PlayerInputComponent->BindAxis(TEXT("MoveForward"),this, &ATank::Move);
	PlayerInputComponent->BindAxis(TEXT("Turn"), this, &ATank::Turn);
}

PlayerInputComponent->BindAxis(TEXT("Turn"), this, &ATank::Turn); 이 부분으로 바인딩을 완료하였다. AddActorLocalRotation은 액터에 로컬 회전을 추가하는 함수이며 AddActorLocalOff과 마찬가지로 스윕 매개 변수를 취하며 인풋 매개 변수 두 개를 취할 수 있고 마지막 세 인풋 매개 변수는 선택사항이다.
FRoator을 보면 FVector처럼 x,y,z 대신에 Pitch, Yaw, Roll을 가진다
Yaw는 괄호 안에 z 축을 중심으로 위쪽 축을 따라 회전한다. 우리는 z축을 중심으로 회전하는 회전 유형만 고려하고 있다.

void ATank::Turn(float Value)
{
	FRotator DeltaRotation= FRotator::ZeroRotator; //x,y,z대신에 Pitch,Yaw,Roll이 존재, 기본값은 초기화 되지 않는다 , zeroRotator은 스태틱 멤버 변수
	// Yaw= Value * DeltaTime * TurnRate;
	DeltaRotation.Yaw = Value * TurnRate * UGameplayStatics::GetWorldDeltaSeconds(this);
	AddActorLocalRotation(DeltaRotation, true);
}

회전을 하는 함수를 완성하였다. 마지막에 AddActorLocalRotation() 함수를 호출하는 것이 젤 중요하다. 그리고 FVector나 FRotor은 0이라도 초기화가 필요하니 잊지말자!

profile
메타쏭이

0개의 댓글