feat(interaction): Character和PlayerController集成交互系统

This commit is contained in:
2026-06-11 11:25:30 +08:00
parent 00ca7044c7
commit 5df451011c
4 changed files with 159 additions and 11 deletions
+32 -6
View File
@@ -11,12 +11,13 @@
#include "EnhancedInputSubsystems.h"
#include "InputActionValue.h"
#include "ChildHood.h"
#include "Interaction/InteractionManager.h"
AChildHoodCharacter::AChildHoodCharacter()
{
// Set size for collision capsule
GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
// Don't rotate when the controller rotates. Let that just affect the camera.
bUseControllerRotationPitch = false;
bUseControllerRotationYaw = false;
@@ -46,15 +47,15 @@ AChildHoodCharacter::AChildHoodCharacter()
FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
FollowCamera->bUsePawnControlRotation = false;
// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character)
// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
// 创建交互管理器组件
InteractionManager = CreateDefaultSubobject<UInteractionManager>(TEXT("InteractionManager"));
}
void AChildHoodCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
// Set up action bindings
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent)) {
// Jumping
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
@@ -92,6 +93,12 @@ void AChildHoodCharacter::Look(const FInputActionValue& Value)
void AChildHoodCharacter::DoMove(float Right, float Forward)
{
// 交互中屏蔽移动
if (bIsInteracting)
{
return;
}
if (GetController() != nullptr)
{
// find out which way is forward
@@ -101,10 +108,10 @@ void AChildHoodCharacter::DoMove(float Right, float Forward)
// get forward vector
const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
// get right vector
// get right vector
const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
// add movement
// add movement
AddMovementInput(ForwardDirection, Forward);
AddMovementInput(RightDirection, Right);
}
@@ -131,3 +138,22 @@ void AChildHoodCharacter::DoJumpEnd()
// signal the character to stop jumping
StopJumping();
}
// ============================================================================
// 交互系统方法
// ============================================================================
UInteractionManager* AChildHoodCharacter::GetInteractionManager() const
{
return InteractionManager;
}
void AChildHoodCharacter::SetInteracting(bool bValue)
{
bIsInteracting = bValue;
}
bool AChildHoodCharacter::IsInteracting() const
{
return bIsInteracting;
}