2301_77414207 2024-04-22 11:18 采纳率: 14.3%
浏览 34

UE里的Pawn类如何切换飞行和行走模式

请问是否有办法让UE里的Pawn类和角色类一样可以切换飞行和行走模式?

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 11:18
    关注

    引自免费微信小程序:皆我百晓生

    在Unreal Engine 4(UE4)中,你可以通过继承APawn类并实现自己的移动逻辑来实现飞行和行走模式的切换。这里我会为你提供一个详细的步骤和代码示例。

    首先,你需要创建一个新的 Pawn 类。在 UE4 中,可以通过以下步骤创建:

    1. 打开内容浏览器(Content Browser),右键点击你想放置新项目的文件夹,选择「新建」(New)->「C++ Class」。
    2. 在弹出的窗口中,选择「Actor」作为基类,然后输入新的类名,例如 MyCharacter,然后点击「Create」。

    接下来,打开你刚创建的 MyCharacter.h 文件,并修改它以继承自 ACharacter 而不是默认的 APawn。这是因为 ACharacter 包含了行走动画和其他人物相关的功能,而我们想让它具备行走和飞行的能力。

    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/Character.h"
    #include "MyCharacter.generated.h"
    
    UCLASS()
    class YOURPROJECT_API AMyCharacter : public ACharacter
    {
        GENERATED_BODY()
    
    public:
        // Sets default values for this character's properties
        AMyCharacter();
    
    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;
    
    public: 
        // Called every frame
        virtual void Tick(float DeltaTime) override;
    
        //叫飞行函数
        UFUNCTION(BlueprintCallable, Category = Movement)
        void Fly();
        
        //叫步行函数
        UFUNCTION(BlueprintCallable, Category = Movement)
        void Walk();
    };
    

    然后,在对应的 .cpp 文件中,添加相应的实现:

    // MyCharacter.cpp
    #include "MyCharacter.h"
    #include "Components/PlayerCameraManager.h"
    
    AMyCharacter::AMyCharacter()
    {
        PrimaryActorTick.bCanEverTick = true;
        Controller = CreateDefaultSubobject<ABaseController>(TEXT("Controller"));
        Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
    
        RootComponent = Mesh;
    }
    
    void AMyCharacter::BeginPlay()
    {
        Super::BeginPlay();
    }
    
    void AMyCharacter::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);
    
        if (GetControlledMovementComponent())
        {
            if (IsWalking())
                GetControlledMovementComponent()->SetWalkMode(WalkModes::WM_Walking);
            else
                GetControlledMovementComponent()->SetWalkMode(WalkModes::WM_Flying);
        }
    }
    
    void AMyCharacter::Fly()
    {
        WalkingState = false;
    }
    
    void AMyCharacter::Walk()
    {
        WalkingState = true;
    }
    

    在上面的代码中,我们定义了一个布尔变量 WalkingState 来跟踪当前是行走还是飞行状态。然后在 Tick() 函数中,根据这个状态设置行走模式。IsWalking() 是一个虚构的方法,用于检查当前的行走状态,你可以根据需要实现它。在这个例子中,我们将它设置为简单的布尔值。

    为了实际实现飞行和行走的切换,你需要在蓝图中绑定这些函数到玩家输入或其他触发事件。在蓝图编辑器中,找到你创建的 MyCharacter 类,然后在 Event Graph 或 User Interface 下面创建一个新的事件。例如,你可以将行走和飞行分别绑定到两个不同的按键上。

    1. 右键点击 Event Graph -> Add Event -> Input -> Key Pressed。
    2. 选择一个按键,比如 W 键,然后在右侧的 Node Graph 中双击 Event Key Pressed,这会自动创建一个 ExecuteUbergraph 节点。
    3. 右键点击空白区域,选择 Add Custom Event,然后从下拉列表中选择 Walk()Fly() 函数。

    这样,当按下指定的按键时,就会触发对应的行走或飞行操作。

    注意:在实际项目中,你可能还需要处理一些额外的事情,比如调整相机视角、播放相应的动画等,但这里只给出了基本的思路。如果你对 UE4 的蓝图系统不熟悉,建议参考官方文档或教程学习更多细节。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月22日

悬赏问题

  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码