更新小船操作逻辑

This commit is contained in:
997146918 2025-08-04 17:29:55 +08:00
parent 73bda7f568
commit c9434d19a3
6 changed files with 3264 additions and 43 deletions

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@
#include "Components/CapsuleComponent.h" #include "Components/CapsuleComponent.h"
#include "GameFramework/CharacterMovementComponent.h" #include "GameFramework/CharacterMovementComponent.h"
#include "GameFramework/SpringArmComponent.h" #include "GameFramework/SpringArmComponent.h"
#include "Kismet/KismetMathLibrary.h"
#include "ProjectFish/Components/ShipSpringArmComponent.h" #include "ProjectFish/Components/ShipSpringArmComponent.h"
@ -65,7 +66,8 @@ AShipbase::AShipbase()
void AShipbase::BeginPlay() void AShipbase::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
MoveForward = GetActorForwardVector();
MoveRight = GetActorRightVector();
} }
// Called every frame // Called every frame
@ -154,48 +156,54 @@ void AShipbase::Move(const FInputActionValue& Value)
// AddMovementInput(ForwardDirection, MovementVector.Y); // AddMovementInput(ForwardDirection, MovementVector.Y);
// AddMovementInput(RightDirection, MovementVector.X); // AddMovementInput(RightDirection, MovementVector.X);
// } // }
//修改移动转向逻辑
if (Controller != nullptr) //第二版修改移动转向逻辑
{ // if (Controller != nullptr)
// Store input values // {
float ForwardInput = MovementVector.Y; // W/S keys for forward/backward // // Store input values
float TurnInput = MovementVector.X; // A/D keys for turning // float ForwardInput = MovementVector.Y; // W/S keys for forward/backward
// float TurnInput = MovementVector.X; // A/D keys for turning
// Only move forward/backward along character's current facing direction //
if (FMath::Abs(ForwardInput) > 0.1f) // // Only move forward/backward along character's current facing direction
{ // if (FMath::Abs(ForwardInput) > 0.1f)
// Get character's current forward direction // {
const FVector ForwardDirection = GetActorForwardVector(); // // Get character's current forward direction
// const FVector ForwardDirection = GetActorForwardVector();
// Apply forward/backward movement //
AddMovementInput(ForwardDirection, ForwardInput); // // Apply forward/backward movement
// AddMovementInput(ForwardDirection, ForwardInput);
// Apply turning only when moving (like a car) //
if (FMath::Abs(TurnInput) > 0.1f) // // Apply turning only when moving (like a car)
{ // if (FMath::Abs(TurnInput) > 0.1f)
// Calculate turn rate based on movement speed and turn input // {
float TurnRate = TurnInput * ShipData.TurnSensitivity * GetWorld()->GetDeltaSeconds(); // // Calculate turn rate based on movement speed and turn input
// float TurnRate = TurnInput * ShipData.TurnSensitivity * GetWorld()->GetDeltaSeconds();
// For backward movement, invert steering (like a real car) //
if (ForwardInput < 0.0f) // // For backward movement, invert steering (like a real car)
{ // if (ForwardInput < 0.0f)
TurnRate *= -1.0f; // {
} // TurnRate *= -1.0f;
// }
// Apply rotation to the character only, not the controller //
FRotator NewRotation = GetActorRotation(); // // Apply rotation to the character only, not the controller
NewRotation.Yaw += TurnRate; // FRotator NewRotation = GetActorRotation();
SetActorRotation(NewRotation); // NewRotation.Yaw += TurnRate;
// // Also update controller rotation for camera // SetActorRotation(NewRotation);
// if (APlayerController* PC = Cast<APlayerController>(Controller)) // }
// { // }
// FRotator ControllerRotation = PC->GetControlRotation(); // }
// ControllerRotation.Yaw += TurnRate;
// PC->SetControlRotation(ControllerRotation); //第三版移动逻辑WASD控制转向和移动
// } FVector TargetDirec = (MovementVector.Y * MoveForward + MovementVector.X * MoveRight).GetSafeNormal();
} FRotator TargetRot = FRotationMatrix::MakeFromX(TargetDirec).Rotator();
}
} FRotator CurrentRot = GetActorRotation();
FRotator NewRotator = FMath::RInterpTo(CurrentRot, TargetRot, GetWorld()->GetDeltaSeconds(), ShipData.TurnSensitivity);
SetActorRotation(NewRotator);
AddMovementInput(GetActorForwardVector(), FMath::Max(FMath::Abs(MovementVector.Y ), FMath::Abs(MovementVector.X)));
} }
void AShipbase::Look(const FInputActionValue& Value) void AShipbase::Look(const FInputActionValue& Value)

View File

@ -52,6 +52,10 @@ protected:
void ApplyMovementSettings(); void ApplyMovementSettings();
void ApplyCameraSettings(); void ApplyCameraSettings();
private:
FVector MoveForward;
FVector MoveRight;
protected: protected:
UPROPERTY(EditAnywhere,BlueprintReadOnly, Category= "Config", meta = (AllowPrivateAccess = "true")) UPROPERTY(EditAnywhere,BlueprintReadOnly, Category= "Config", meta = (AllowPrivateAccess = "true"))
FShipDataConfig ShipData; FShipDataConfig ShipData;