【UE4 C++】 获取Actor、Controller、Pawn、Character

本文介绍在UE4中如何使用不同的方法获取Actor、Controller、Pawn和Character等游戏对象,包括遍历Actor、通过类名获取所有Actor实例、通过标签获取Actor、获取特定接口的Actor及Player Controller。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取 Actor

TActorIterator 遍历

  • 可以用于遍历 Actor,也可以用于遍历 Component

    for (TActorIterator<AStaticMeshActor> ActorIter(GetWorld()); ActorIter; ++ActorIter)
    {
    	UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("%s"), *ActorIter->GetName()));
    }
    

UKismetSystemLibrary::GetAllActorsOfClass

  • Syntax

    static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors);
    
  • 代码实现

    TArray<AActor*> OutActors;
    UGameplayStatics::GetAllActorsOfClass(GetWorld(), AStaticMeshActor::StaticClass(), OutActors);
    for (AActor* actor : OutActors)
    {
    UKismetSystemLibrary::PrintString(GetWorld(), actor->GetName());
    }
    

UKismetSystemLibrary::GetAllActorsWithTag

  • Syntax

    static void GetAllActorsWithTag(const UObject* WorldContextObject, FName Tag, TArray<AActor*>& OutActors);
    

UKismetSystemLibrary::GetAllActorsWithInterface

  • Syntax

    static void GetAllActorsWithInterface(const UObject* WorldContextObject, TSubclassOf<UInterface> Interface, TArray<AActor*>& OutActors);
    

获取 Controller

可配合 Cast 转换成对应的 Controller

UKismetSystemLibrary::GetPlayerController

  • Syntax

    static class APlayerController* GetPlayerController(const UObject* WorldContextObject, int32 PlayerIndex);
    
  • 代码实现

    APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
    

UWorld::GetFirstPlayerController

  • 代码实现

    APlayerController* playerController = GetWorld()->GetFirstPlayerController();
    

获取 Pawn

UKismetSystemLibrary::GetPlayerPawn

  • 代码实现

    APawn* myPawn = Cast<ADrone>(UGameplayStatics::GetPlayerPawn(GetWorld(), 0));
    

GetPawn

  • 代码实现

    APawn* myPawn = GetWorld()->GetFirstPlayerController()->GetPawn();
    

获取 Character

UGameplayStatics::GetPlayerCharacter

  • 代码实现

    ACharacter* myPawn = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0);
    

GetCharacter

  • 代码实现

    ACharacter* myPawn = GetWorld()->GetFirstPlayerController()->GetCharacter();
<think>好的,我现在需要帮助用户了解如何在Unreal Engine 5中创建玩家角色。首先,我应该回顾用户提供的引用内容,特别是引用[1]、[2]和[3],因为这些可能包含相关的信息。 根据引用[1],玩家角色通常属于Character类,它是Pawn的子类,而Pawn又是Actor的子类。因此,创建玩家角色需要从Character类派生。此外,Player Controller负责处理输入,所以需要设置Player Controller并将输入与角色绑定。用户可能还需要用到组件(Component),比如移动组件或交互组件,这些可以添加到角色上,如引用[3]提到的Widget Interaction Component的例子。 接下来,用户的问题涉及到蓝图和C++的使用。根据引用[1],蓝图是UE中的可视化脚本系统,适合快速原型设计。因此,创建角色可以通过蓝图或C++实现。可能需要分步骤说明这两种方法。 步骤可能包括:创建Character类,添加移动组件,设置摄像机,配置输入映射,编写逻辑等。同时,动画方面可能需要引用[2]中的例子,比如Animation Content Examples的1.5章节,来应用动画到角色。 用户可能需要知道如何设置碰撞体、胶囊体组件,以及如何处理动画蓝图。此外,Game Mode的设置也很重要,因为它决定了默认的Pawn类和Player Controller。 需要确保回答结构清晰,分点说明,同时引用相关的资料。可能的问题包括如何添加动画、如何处理输入、如何优化角色控制等。因此,在相关问题的部分,可以提出这些点,帮助用户进一步深入学习。</think>### 如何在Unreal Engine 5中创建玩家角色 #### 1. **选择基础类** 玩家角色通常继承自`Character`类(`Pawn`的子类),它内置了角色移动组件`CharacterMovementComponent`和胶囊体碰撞组件。在内容浏览器中右键选择 **Blueprint Class**,搜索并选择`Character`作为父类[^1]。 #### 2. **添加组件** - **骨骼网格体(Skeletal Mesh)**:导入或选择角色的3D模型。 - **摄像机(Camera)**:添加`Spring Arm Component`和`Camera Component`以实现第三人称视角。 - **输入绑定**:通过 **Project Settings > Input** 定义按键映射(如移动、跳跃)[^1]。 #### 3. **配置移动逻辑** 在蓝图中通过以下节点控制移动: ```plaintext Event Axis (MoveForward/MoveRight) → Add Movement Input Event Action (Jump) → Press/Release → Jump ``` 或通过C++重写`SetupPlayerInputComponent`函数: ```cpp void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward); } ``` #### 4. **动画绑定** - 创建动画蓝图(Animation Blueprint),将动画状态机与骨骼网格体关联。 - 使用`Blueprint Thread Safe Update Animation`节点更新动画参数(如速度、跳跃状态)[^2]。 #### 5. **设置Game Mode** 在 **World Settings** 中指定`Game Mode`,将其`Default Pawn Class`设为新建的角色蓝图,并分配`Player Controller`类。 #### 6. **交互功能扩展** 通过添加组件实现额外功能: - **Widget Interaction Component**:用于UI交互(如点击按钮)[^3]。 - **Ability System Component**:实现技能系统(需启用Gameplay Ability插件)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值