본문 바로가기

공부/Unreal5

Unreal 짚라인 만들기

Unreal 짚라인 핵심은 포탈과 같습니다.

하지만 다른점은 포탈은 실시간으로 이동할 위치가 바뀌는 반면에

짚라인은 이미 위치가 정해져있다는 것입니다.

 

void UParkourComponent::JumpEvent()
{
	if (ParkourType == EParkourType::EPT_ZIPLINE)
	{
    	//짚라인 종료시
		FLatentActionInfo Info;
		Info.CallbackTarget = this;
		Info.UUID = 0;
		Info.Linkage = 0;
		Info.ExecutionFunction = FName("ZiplineFinish");

		UKismetSystemLibrary::MoveComponentTo(
			Character->GetCapsuleComponent(),
			Character->GetActorLocation(),
			Character->GetActorRotation(),
			false,
			false,
			0.001f,
			false,
			EMoveComponentAction::Type::Move,
			Info);

		return;
	}
	if (ZiplineEnable)
	{
    	//짚라인 수행시 가져온 짚라인 시작지점과 끝지점을 가져온다.
        
		ZiplinePlayStart = ZiplineStart;
		ZiplinePlayEnd = ZiplineEnd;
		Character->GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_Flying);
		FVector Start = ZiplinePlayStart - (FVector(0.f, 0.f, 40.f));

		FRotator Rot=UKismetMathLibrary::FindLookAtRotation(Start, ZiplineEnd);
		FLatentActionInfo Info;
		Info.CallbackTarget = this;
		Info.ExecutionFunction = FName("ZiplinePlay");
		Info.UUID = 0;
		Info.Linkage = 0;
		
		UKismetSystemLibrary::MoveComponentTo(
			Character->GetCapsuleComponent(),
			Start,
			Rot,
			false,
			false,
			0.2f,
			false,
			EMoveComponentAction::Type::Move,
			Info);
		
		SetParkourType(EParkourType::EPT_ZIPLINE);
		return;
	}
    ...
}

//이동할 위치로
void UParkourComponent::ZiplinePlay()
{
	FLatentActionInfo Info;
	Info.CallbackTarget = this;
	Info.UUID = 0;
	Info.ExecutionFunction = FName("ZiplineFinish");
	Info.Linkage = 0;
	FVector End = ZiplinePlayEnd - (FVector(0.f, 0.f, 40.f));
	float Time = (End - ZiplinePlayStart).Length() / ZiplineSpeed;

	UKismetSystemLibrary::MoveComponentTo(
		Character->GetCapsuleComponent(),
		End,
		Character->GetActorRotation(),
		false,
		true,
		Time,
		false,
		EMoveComponentAction::Type::Move,
		Info);
}
//끝났으면 전체적으로 초기화해줍니다.
void UParkourComponent::ZiplineFinish()
{
	FRotator Rot=Character->GetActorRotation();
	Rot.Pitch = 0.f;
	Character->SetActorRotation(Rot);
	Character->GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_Falling);
	SetParkourType(EParkourType::EPT_NONE);
}

 

결과입니다.

점프이벤트시 호출했기때문에 중간에 짚라인 중지도 할 수 있습니다.

https://youtu.be/RK6tAR_1gZ8?t=1