Add Follow Player setting to CameraVolume
This commit is contained in:
		
							parent
							
								
									a5cfef827b
								
							
						
					
					
						commit
						0142134d33
					
				| @ -3,9 +3,12 @@ | ||||
| 
 | ||||
| #include "CameraVolume.h" | ||||
| #include "TankPlayerCharacter.h" | ||||
| #include "Kismet/KismetMathLibrary.h" | ||||
| 
 | ||||
| ACameraVolume::ACameraVolume() | ||||
| { | ||||
| 	PrimaryActorTick.bCanEverTick = true; | ||||
| 	 | ||||
| 	ArrowComponent = CreateDefaultSubobject<UArrowComponent>(TEXT("Arrow Component")); | ||||
| 	ArrowComponent->SetupAttachment(RootComponent); | ||||
| 
 | ||||
| @ -18,15 +21,34 @@ void ACameraVolume::BeginPlay() | ||||
| { | ||||
| 	Super::BeginPlay(); | ||||
| 	this->OnActorBeginOverlap.AddDynamic(this, &ACameraVolume::OnBeginOverlap); | ||||
| 	this->OnActorEndOverlap.AddDynamic(this, &ACameraVolume::ACameraVolume::OnEndOverlap); | ||||
| } | ||||
| 
 | ||||
| void ACameraVolume::Tick(float DeltaSeconds) | ||||
| { | ||||
| 	Super::Tick(DeltaSeconds); | ||||
| 
 | ||||
| 	if (IsActive && FollowPlayer && TankPlayerCharacter) | ||||
| 	{ | ||||
| 		TankPlayerCharacter->CameraComponent->SetWorldRotation(UKismetMathLibrary::FindLookAtRotation( | ||||
| 			ArrowComponent->GetComponentTransform().GetLocation(), TankPlayerCharacter->GetTransform().GetLocation())); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void ACameraVolume::OnBeginOverlap(AActor* OverlappedActor, AActor* OtherActor) | ||||
| { | ||||
| 	if (ATankPlayerCharacter* PlayerCharacter = Cast<ATankPlayerCharacter>(OtherActor)) | ||||
| 	{ | ||||
| 		FTransform transform = PlayerCharacter->CameraComponent->GetComponentTransform(); | ||||
| 		transform.SetLocation(ArrowComponent->GetComponentTransform().GetLocation()); | ||||
| 		transform.SetRotation(ArrowComponent->GetComponentTransform().GetRotation()); | ||||
| 		PlayerCharacter->CameraComponent->SetWorldTransform(transform); | ||||
| 		PlayerCharacter->CameraComponent->SetWorldLocation(ArrowComponent->GetComponentTransform().GetLocation()); | ||||
| 		PlayerCharacter->CameraComponent->SetWorldRotation(ArrowComponent->GetComponentTransform().GetRotation()); | ||||
| 
 | ||||
| 		TankPlayerCharacter = PlayerCharacter; | ||||
| 		IsActive = true; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void ACameraVolume::OnEndOverlap(AActor* OverlappedActor, AActor* OtherActor) | ||||
| { | ||||
| 	IsActive = false; | ||||
| 	TankPlayerCharacter = nullptr; | ||||
| } | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include "CoreMinimal.h" | ||||
| #include "TankPlayerCharacter.h" | ||||
| #include "Camera/CameraComponent.h" | ||||
| #include "Components/ArrowComponent.h" | ||||
| #include "Engine/TriggerVolume.h" | ||||
| @ -23,12 +24,31 @@ public: | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite) | ||||
| 	UCameraComponent* DebugCamera; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite) | ||||
| 	bool FollowPlayer = false; | ||||
| 	 | ||||
| private: | ||||
| 
 | ||||
| 	UPROPERTY() | ||||
| 	bool IsActive = false; | ||||
| 
 | ||||
| 	UPROPERTY() | ||||
| 	ATankPlayerCharacter* TankPlayerCharacter = nullptr; | ||||
| 	 | ||||
| public: | ||||
| 	 | ||||
| 	ACameraVolume(); | ||||
| 
 | ||||
| protected: | ||||
| 	virtual void BeginPlay() override; | ||||
| 
 | ||||
| public: | ||||
| 	virtual void Tick(float DeltaSeconds) override; | ||||
| 
 | ||||
| private: | ||||
| 	UFUNCTION() | ||||
| 	void OnBeginOverlap(AActor* OverlappedActor, AActor* OtherActor); | ||||
| 
 | ||||
| 	UFUNCTION() | ||||
| 	void OnEndOverlap(AActor* OverlappedActor, AActor* OtherActor); | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user