您的位置:

UE4 Gamemode详解

UE4 Gamemode是指在游戏中,管理整个游戏或关卡生命周期的核心类。它掌握着游戏状态和规则,每一帧都会被调用,并能响应玩家输入。

一、Gamemode的重要性

Gamemode是负责管理游戏状态的类,它决定了整个游戏的规则、流程和难度。因此,对于开发者来说,Gamemode的编写非常重要。

在Gameplay Framework中,Game Mode被认为是世界的代理代表,控制游戏规则、启动检测以及终止游戏。它还接受玩家输入、处理游戏状态转换并与Actor类交互。

二、Gamemode创建与绑定

创建新Gamemode的方式有两种:使用编辑器和直接创建C++类。

使用编辑器可以创建一个新的Gamemode蓝图,该蓝图可以在所有世界中重复使用。创建新的Gamemode类需要通过Visual Studio以C++代码的形式创建。在这两种情况下,创建后需要将新Gamemode与关卡或世界绑定。

要将新Gamemode与关卡绑定,在场景编辑器中右键单击场景并选择世界设定。选择Gamemode类对象并设置它的值,即可将Gamemode与世界相关联。

要将新Gamemode与特定关卡绑定,则可以通过打开“世界编辑器”并选择“关卡默认设置”功能来获取这个关卡。这个设置能够让你选择所有场景组件的默认属性,因此你可以更改Gamemode的默认值为新创建的Gamemode类。

三、Gamemode主要功能

1. 生命/生存管理

UCLASS()
class MYFPS_API AFPSShooterGameModeBase : public AGameModeBase
{
    GENERATED_BODY()

protected:
    virtual void BeginPlay() override;

    /**
     * Countdown timer, when it reaches 0, activates the appropriate function
     * @param TimeRemainingInSeconds Total life span
     */
    virtual void CountdownToZero(float TimeRemainingInSeconds);

    /** Time remaining (initial life) */
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Health and Lives")
    float InitialTime = 300.f;

    /** Timer handle that is executed every second */
    FTimerHandle CountdownTimerHandle;
};

以上代码示例演示了如何使用Gamemode实现一个倒计时生命管理。

2. 游戏胜利

UFUNCTION(BlueprintCallable)
void OnPlayerWin(AActor* PlayerActor);

/** Victory conditions for the game */
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Game Rules")
TSubclassOf GameRulesWidgetClass;

virtual void PostLogin(APlayerController* NewPlayer) override;

virtual void EndGame(bool bPlayerHasWon);

virtual void Tick(float DeltaSeconds) override;

virtual void HandleMatchHasEnded() override;

  

以上代码示例演示了如何使用Gamemode在游戏胜利时将一些操作和事件触发。

3. Ghoul调整示例

UPROPERTY()
class AGhoul* TargetGhoul;

// Apply a recoil effect when the player fires
virtual void HandlePlayerFire(AActor* PlayerActor, FVector MuzzleLocation, FRotator MuzzleRotation) override;

/** Sequence (animation, sound, particle) for Ghoul to play when defeated */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Ghoul explosion")
UAnimMontage* KillMontage;

/** Particles to use for Ghoul's explosion when it's killed */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Ghoul explosion")
UParticleSystem* KillFX;

以上代码示例演示了如何使用Gamemode调整游戏中的Ghoul物体。

四、结论

在UE4中,Gamemode是实现游戏逻辑的重要组成部分,它控制游戏中的各种状态转换,决定游戏规则和难度,并与Actor类交互。Gamemode的创建、绑定和调整非常简单易于操作,更重要的是,他能帮助你实现在游戏中各种基本的逻辑功能。开发者可以使用Gamemode轻松管理游戏规则、流程和难度,极大地简化了游戏开发的复杂性,也为开创更多的玩法带来了更多可能性。