Input Action Mappings

Jihyun·2023년 12월 19일
0

Unreal

목록 보기
8/11

Input Mapping

[Project Settings] - [Input]
사용자의 입력을 받기 위해 키보드나 마우스의 각 키를 눌렀을 때 또는 누르지 않았을 때를 일정한 값으로 변환해주어야 한다.

  • Action Mappings : 버튼 입력이 있는지 없는지 확인
  • Axis Mappings : 버튼 입력의 강도나 기울기를 값으로 확인
  • Speedch Mappings : Window MR 장치에서 음성 인식을 했는지 확인

블루프린트로 동작 매핑하기


1. 마우스 왼쪽 버튼을 Grab 동작으로 매핑하기

  1. Grabber 컴포넌트가 있는 블루프린트로 이동(BP_Player)
    블루프린트의 이벤트 그래프에서 Action Events에서 Action Mappings에 등록한 Input Action 확인 가능

C++ 클래스의 함수를 블루프린트에서 호출하기

블루프린트에 게임플레이 요소 노출시키기
UFUNCTION 리플렉션 시스템을 사용하여 C++ 함수를 블루프린트 노드화할 수 있다

UFUNCTION(BlueprintCallable)
	void Releas();
UFUNCTION(BlueprintCallable)
	void Grab();
    
void UGrabber::Release()
{
	UE_LOG(LogTemp, Display, TEXT("Release"));

}

void UGrabber::Grab()
{
	//Grabber 컴포넌트의 현재 위치
	FVector Start = GetComponentLocation();
	//Grabber 컴포넌트의 시작 벡터와 forward 벡터를 더한 값 * 라인 트레이스의 최대 거리
	//시작점에서부터 정면 방향으로 MaxGrabDistance만큼 이동한 지점이 끝점
	//GetForwardVector() : 현재 컴포넌트의 정면 방향 벡터를 반환, 해당 컴포넌트가 바라보는 전방 방향
	FVector End = Start + GetForwardVector() * MaxGrabDistance;

	DrawDebugLine(GetWorld(), Start, End, FColor::Red);
	FCollisionShape Sphere = FCollisionShape::MakeSphere(GrabRadius);
	FHitResult HitResult;

	//SweepSingleByChannel : bool값을 반환
	//FQuat::Identity : 회전값이 없다
	bool HasHit = GetWorld()->SweepSingleByChannel(HitResult, Start, End, FQuat::Identity, ECC_GameTraceChannel2, Sphere);
	
	//충돌이 있다
	if(HasHit)
	{	
		//HitResult struct을 사용하여 구체 트레이스에 부딪힌 액터를 가져온다
		AActor* HitActor = HitResult.GetActor();
		//GetActorNameOrLabel()을 사용하여 액터의 이름을 가져온다
		UE_LOG(LogTemp, Display, TEXT("Hit actor : %s"), *HitActor->GetActorNameOrLabel());
	}
	else
	{
		UE_LOG(LogTemp, Display, TEXT("No actor hit"));

	}
}
    


C++ 씬 컴포넌트인 Grabber를 이벤트 그래프 창으로 끌어와 변수로 만들어준다.
Grabber 변수에서 노드를 끌어와 C++ 함수를 검색할 수 있다.

profile
잊어버려도 다시 리마인드 할 수 있도록 공부한 것을 기록합니다

0개의 댓글