First camera system; follows midpoint of both character's Y and Z pos
First camera system; follows midpoint of both character's Y and Z pos
This commit is contained in:
parent
ef03c80ca8
commit
6e0c181014
1
.gitignore
vendored
1
.gitignore
vendored
@ -68,3 +68,4 @@ Build/*/**
|
||||
|
||||
# Cache files for the editor to use
|
||||
**/DerivedDataCache/*
|
||||
Scratch
|
||||
|
BIN
KOFForever/Content/Core/BP_DefaultCamera.uasset
(Stored with Git LFS)
Normal file
BIN
KOFForever/Content/Core/BP_DefaultCamera.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
KOFForever/Content/Maps/TestMap.umap
(Stored with Git LFS)
BIN
KOFForever/Content/Maps/TestMap.umap
(Stored with Git LFS)
Binary file not shown.
@ -9,7 +9,8 @@
|
||||
"Type": "Runtime",
|
||||
"LoadingPhase": "Default",
|
||||
"AdditionalDependencies": [
|
||||
"Paper2D"
|
||||
"Paper2D",
|
||||
"Engine"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -0,0 +1,36 @@
|
||||
|
||||
|
||||
|
||||
#include "Camera/KOFDefaultCamera.h"
|
||||
|
||||
#include "DrawDebugHelpers.h"
|
||||
#include "Camera/CameraComponent.h"
|
||||
|
||||
AKOFDefaultCamera::AKOFDefaultCamera()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
MinFOV = 80.0f;
|
||||
MaxFOV = 85.0f;
|
||||
GetCameraComponent()->SetFieldOfView(MinFOV);
|
||||
|
||||
HeightOffset = 60.0f;
|
||||
ZAveragingFactor = 2.0f;
|
||||
}
|
||||
|
||||
void AKOFDefaultCamera::Tick(float DeltaSeconds)
|
||||
{
|
||||
Super::Tick(DeltaSeconds);
|
||||
|
||||
check(P1);
|
||||
check(P2);
|
||||
|
||||
FVector P1Loc = P1->GetActorLocation();
|
||||
FVector P2Loc = P2->GetActorLocation();
|
||||
FVector CameraLoc = GetActorLocation();
|
||||
|
||||
FVector MidPoint = FVector(CameraLoc.X, (P1Loc.Y + P2Loc.Y) / 2.0f, ((P1Loc.Z + P2Loc.Z) / ZAveragingFactor) + HeightOffset);
|
||||
SetActorLocation(MidPoint);
|
||||
|
||||
// set FOV
|
||||
}
|
@ -24,24 +24,7 @@ AKOFBaseCharacter::AKOFBaseCharacter()
|
||||
// Set the size of our collision capsule.
|
||||
GetCapsuleComponent()->SetCapsuleHalfHeight(96.0f);
|
||||
GetCapsuleComponent()->SetCapsuleRadius(40.0f);
|
||||
|
||||
// Create a camera boom attached to the root (capsule)
|
||||
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
|
||||
CameraBoom->SetupAttachment(RootComponent);
|
||||
CameraBoom->TargetArmLength = 500.0f;
|
||||
CameraBoom->SocketOffset = FVector(0.0f, 0.0f, 0.0f);
|
||||
CameraBoom->bDoCollisionTest = false;
|
||||
CameraBoom->SetRelativeRotation(FRotator(0.0f, 180.f, 0.0f));
|
||||
|
||||
|
||||
// Create an orthographic camera (no perspective) and attach it to the boom
|
||||
SideViewCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("SideViewCamera"));
|
||||
SideViewCameraComponent->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
|
||||
|
||||
// Prevent all automatic rotation behavior on the camera, character, and camera component
|
||||
CameraBoom->SetUsingAbsoluteRotation(true);
|
||||
SideViewCameraComponent->bUsePawnControlRotation = false;
|
||||
SideViewCameraComponent->bAutoActivate = true;
|
||||
GetCharacterMovement()->bOrientRotationToMovement = false;
|
||||
|
||||
// Configure character movement
|
||||
|
@ -0,0 +1,56 @@
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Camera/CameraActor.h"
|
||||
#include "KOFDefaultCamera.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class KOFFOREVER_API AKOFDefaultCamera : public ACameraActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
AKOFDefaultCamera();
|
||||
|
||||
virtual void Tick(float DeltaSeconds) override;
|
||||
protected:
|
||||
/**
|
||||
* Min FOV camera will zoom in to as character's walk farther apart from each other.
|
||||
*
|
||||
*
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = CameraSettings, meta = (UIMin = "5.0", UIMax = "170", ClampMin = "0.001", ClampMax = "360.0", Units = deg))
|
||||
float MinFOV;
|
||||
|
||||
/** Max FOV camera will zoom out to as character's walk farther apart from each other */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = CameraSettings, meta = (UIMin = "5.0", UIMax = "170", ClampMin = "0.001", ClampMax = "360.0", Units = deg))
|
||||
float MaxFOV;
|
||||
|
||||
/** Offset added to the camera's Z value after performing the character mid point calculation */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = CameraSettings)
|
||||
float HeightOffset;
|
||||
|
||||
/**
|
||||
* Value used when averaging both character's Z positions to find the camera's final Z position.
|
||||
*
|
||||
* A value of 2.0 will set the camera's Z position to the midpoint between both character's Z positions.
|
||||
* A value less than 2.0 will keep the camera closer to the ground even as another player jumps.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = CameraSettings)
|
||||
float ZAveragingFactor;
|
||||
|
||||
|
||||
// References to player main character's
|
||||
// eventually we want to spawn all the player's characters from game mode? and then we can get the references to
|
||||
// P1 and P2 from there. For now we'll just set the references manually in the level
|
||||
UPROPERTY(EditAnywhere)
|
||||
AActor* P1;
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
AActor* P2;
|
||||
};
|
@ -21,14 +21,6 @@ class KOFFOREVER_API AKOFBaseCharacter : public APaperCharacter
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
/** Side view camera */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera, meta=(AllowPrivateAccess="true"))
|
||||
class UCameraComponent* SideViewCameraComponent;
|
||||
|
||||
/** Camera boom positioning the camera beside the character */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
||||
class USpringArmComponent* CameraBoom;
|
||||
|
||||
UTextRenderComponent* TextComponent;
|
||||
virtual void Tick(float DeltaSeconds) override;
|
||||
|
||||
@ -74,10 +66,5 @@ protected:
|
||||
public:
|
||||
AKOFBaseCharacter();
|
||||
|
||||
/** Returns SideViewCameraComponent subobject **/
|
||||
FORCEINLINE class UCameraComponent* GetSideViewCameraComponent() const { return SideViewCameraComponent; }
|
||||
/** Returns CameraBoom subobject **/
|
||||
FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
|
||||
|
||||
FORCEINLINE class UPaperFlipbookComponent* GetShadow() const { return Shadow; }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user