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()
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库