UnrealEngine:Pawn类

DefaultPawn

#include "CoreMinimal.h"

#include "UObject/ObjectMacros.h"

#include "GameFramework/Pawn.h"

#include "DefaultPawn.generated.h"

class UInputComponent;

class UPawnMovementComponent;

class USphereComponent;

class UStaticMeshComponent;

UCLASS(config=Game, Blueprintable, BlueprintType)

class ENGINE_APU ADefaultPawn : public APwan

{

  GENERATED_UCLASS_BODY()

  virtual UPawnMovementComponent* GetMovementComponent() const override;

  virtual void SetupPlayerInputComponent(UInputComponent* InInputComponent) overrie;

  virtual void UpdateNavigationRelevance() override;

  UFUNCTION(BlueprintCallable, Category="Pawn")

  virtual void MoveForward(float Val);

  UFUNCTION(BlueprintCallable, Category="Pawn")

  virtual void MoveRight(float Val);

  UFUNCTION(BlueprintCallable, Category="Pawn")

  virtual void MoveUp_World(float Val);

  UFUNCTION(BlueprintCallable, Category="Pawn")

  virtual void TurnAtRate(float Rate);

  UFUNCTION(BlueprintCallablem Category="Pawn")

  virtual void LookUpAtRate(float Rate);

  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Pawn")

  float BaseTurnRate;

  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Pawn");

  float BaseLookUpRate;

 

public:

  static FName MovementComponentName;

 

protected:

  UPROPERTY(Category=Pawn, VisibleAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess="true"))

  TObjectPtr<UPawnMovementComponent> MovementComponent;

 

public:

  static FName CollisionComponentName;

private:

  UPROPERTY(Category=Pawn, VisibleAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess="true"))

  TObjectPtr<USphereComponent> CollisionComponent;

public:

  static FName MeshComponentName;

private:

  UPROPERTY(Category=Pawn, VisibleAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess="true"))

  TObjectPtr<UStaticMeshComponent> MeshComponent;

public:

  UPROPERTY(Category=Pawn, EditAnywhere, BlueprintReadOnly)

  uint32 bAddDefaultMovementBindings:1;

 

  USphereComponent* GetCollisionComponent() const {return CollisionComponent;}

  UStaticMeshComponent* GetMeshComponent() const {return MeshComponent;}

};

 

#include "GameFramework/DefaultPawn.h"

#include "UObject/ConstructorHelpers.h"

#include "Engine/World.h"

#include "Components/StaticMeshComponent.h"

#include "GameFramework/PlayerController.h"

#include "Engine/CollisionProfile.h"

#include "Engine/StaticMesh.h"

#include "Components/SphereComponent.h"

#include "GameFramework/PawnMovementComponent.h"

#include "GameFramework/FloatingPawnMovement.h"

#include "GameFramework/PlayerInput.h"

 

#include UE_INLINE_GENERATED_CPP_BY_NAME(DefaultPawn)

 

FName ADefaultPawn::MovementComponentName(TEXT("MovementComponent0"));

FName ADefaultPawn::CollisionComponentName(TEXT("CollisionComponent0"));

FName ADefaultPawn::MeshComponentName(TEXT("MeshConponent0"));

 

ADefaultPawn::ADefaultPanw(const FObjetInitializer& ObjectInitializer)

  : Super(ObjectInitializer)

{

  SetCanBeDamaged(true);

  

  SetRemoteRoleForBackwardsCompat(ROLE_SimulatedProxy);

  bReplicates = true;

  NetPriority = 3.0f;

  

  BaseEyeHeight = 0.0f;

  bCollideWhenPlacing = false;

  SpawnCollisionHandlingMethod = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;

  

  CollisionComponent = CreateDefaultSubobject<USphereComponent>(ADefaultPawn::CollisionComponentName);

  CollisionComponent->InitSphereRadius(35.0f);

  CollisionComponent->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName);

 

  CollisionComponent->CanCharacterStepUpOn = ECB_No;

  CollisionComponent->SetShouldUpdatePhysicsVolume(true);

  CollisionComponent->SetCanEverAffectNavigation(false);

  CollisionComponent->bDynamicObstacle = true;

 

  RootComponent = CollisionComponent;

 

  MovementComponent = CreateDefaultSubobject<UPawnMovementComponent, UFloatingPawnMovement>(ADefaultPawn::MovementComponentName);

  MovementComponent->UpdatedComponent = CollisionComponent;

  

  struct FConstructorStatics

  {

    ConstructorHelpers::FObjectFinder<UStaticMesh> SphereMesh;

    FConstructorStatics()

      : SphereMesh(TEXT("/Engine/EngineMeshes/Sphere")) {}

  };

 

  static FConstructorStatics ConstructorStatics;

 

  MeshComponent = CreateOptionalDefaultSubobject<UStaticMeshComponent>(ADefaultPawn::MeshComponentName);

  if (MeshComponent)

  {

    MeshComponent->SetStaticMesh(ConstructorStatics.SphereMesh.Object);

    MeshComponent->AlwaysLoadOnClient = true;

    MeshComponent->AlwaysLoadOnServer = true;

    MeshComponent->bOwnerNoSee = true;

    MeshComponent->bCastDynamicShadow = true;

    MeshComponent->bAffectDynamicIndirectLighting = false;

    MeshComponent->bAffectDistanceFieldLighting = false;

    MeshComponent->bVisibleInRayTracing = false;

    MeshComponent->PrimaryComponnetTick.TickGroup = TG_PrePhysics;

    MeshComponent->SetupAttackment(RootComponent);

    MeshComponent->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName);

    const float Scale = CollisionComponent->GetUnscaledSphereRadius() / 160.f;

    MeshComponent->SetRelativeScale3D(FVector(Scale));

    MeshComponent->SetGenerateOverlapEvents(false);

    MeshComponent->SetCanEverAffectNavigation(false);

  }

 

  bAddDefaultMovementBindings = true;

 

  BaseTurnRate = 45.f;

  BaseLookUpRate = 45.f;  

}

 

void InitializeDefaultPawnInputBindings()

{

  static bool bBindingsAdded = false;

  if (!bBindingsAdded)

  {

    bBindingsAdded = true;

    

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveForward", EKeys::W, 1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveForward", EKeys::S, -1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveForward", EKeys::Up, 1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveForward", EKeys::Down, -1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveForward", EKeys::Gamepad_LeftY, 1.f));

 

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveRight", EKeys::A, -1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveRight", EKeys::D, 1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveRight", EKeys::Gamepad_LeftX, 1.f));

 

#if !PLATFORM_ANDROID

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveUp", EKeys::Gamepad_LeftThumbstick, 1.f);

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveUp", EKeys::Gamepad_RightThumbstick, -1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefualtPawn_MoveUp", EKeys::Gamepad_FaceButton_Bottom, 1.f));

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveUp", EKeys::LeftControl, -1.f);

    UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping("DefaultPawn_MoveUp", EKeys::SpaceBar, 1.f));

    UPlayerInput::AddEngineDefinedAxisMapping()

  }

}

 

posted @   言午丶  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示