当前位置: 首页 > news >正文

RPG61.制作敌人攻击波数一

1。创建一个gamemode的c++类

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameMode/XMBGameModeBase.h"
#include "XMBSurvialGameMode.generated.h"UENUM(BlueprintType)
enum class EXMBSurvialGameModeState : uint8
{WaitSpawnNewWava,SpawningNewWava,InProgress,WaveComleted,AllWavesDonw,PlayerDied
};//
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSurvialGameModeStateChanged, EXMBSurvialGameModeState, CurrentState);/*** */
UCLASS()
class ARPG_GRIVITY_API AXMBSurvialGameMode : public AXMBGameModeBase
{GENERATED_BODY()protected:virtual void BeginPlay() override;virtual void Tick(float DeltaSeconds) override;private://void SetCurrentSurvialGameModeState(EXMBSurvialGameModeState Instate);//UPROPERTY()EXMBSurvialGameModeState CurrentSurvialGameModeState;//UPROPERTY(BlueprintAssignable,BlueprintCallable)FOnSurvialGameModeStateChanged OnSurvialGameModeStateChanged;};
// Fill out your copyright notice in the Description page of Project Settings.#include "GameMode/XMBSurvialGameMode.h"void AXMBSurvialGameMode::BeginPlay()
{Super::BeginPlay();
}void AXMBSurvialGameMode::Tick(float DeltaSeconds)
{Super::Tick(DeltaSeconds);
}void AXMBSurvialGameMode::SetCurrentSurvialGameModeState(EXMBSurvialGameModeState Instate)
{CurrentSurvialGameModeState = Instate;OnSurvialGameModeStateChanged.Broadcast(CurrentSurvialGameModeState);
}

然后更换地图里的gamemode

2。接下来制作敌人来袭波数的定义

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Character/EnemyBase.h"
#include "GameMode/XMBGameModeBase.h"
#include "XMBSurvialGameMode.generated.h"UENUM(BlueprintType)
enum class EXMBSurvialGameModeState : uint8
{WaitSpawnNewWava,SpawningNewWava,InProgress,WaveComleted,AllWavesDonw,PlayerDied
};//敌人波数的信息
USTRUCT(BlueprintType)
struct FXMBEnemyWaveSpawnerInfo
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly)TSoftClassPtr<AEnemyBase> SoftEnemyClassToSpawn;UPROPERTY(EditAnywhere)int32 MinPerSpawnCount = 1;UPROPERTY(EditAnywhere)int32 MaxPerSpawnCount = 1;};//敌人波数定义
USTRUCT(BlueprintType)
struct FXMBEnemyWaveSpawnerTableRow : public FTableRowBase
{GENERATED_BODY()UPROPERTY(EditAnywhere)TArray<FXMBEnemyWaveSpawnerInfo> EnemyWaveSpawnerDefinitions;UPROPERTY(EditAnywhere)int32 TotalEnemyToSpawnThisWave = 1;};//广播当前敌人攻击波数
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSurvialGameModeStateChanged, EXMBSurvialGameModeState, CurrentState);/*** */
UCLASS()
class ARPG_GRIVITY_API AXMBSurvialGameMode : public AXMBGameModeBase
{GENERATED_BODY()protected:virtual void BeginPlay() override;virtual void Tick(float DeltaSeconds) override;private://void SetCurrentSurvialGameModeState(EXMBSurvialGameModeState Instate);//当前波数UPROPERTY()EXMBSurvialGameModeState CurrentSurvialGameModeState;//波数委托UPROPERTY(BlueprintAssignable,BlueprintCallable)FOnSurvialGameModeStateChanged OnSurvialGameModeStateChanged;//敌人波数的表格UPROPERTY(EditDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))UDataTable* EnemyWaveSpawnerDataTable;};

然后创建数据表格

2。继续设置与波数有关的配置

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Character/EnemyBase.h"
#include "GameMode/XMBGameModeBase.h"
#include "XMBSurvialGameMode.generated.h"UENUM(BlueprintType)
enum class EXMBSurvialGameModeState : uint8
{WaitSpawnNewWava,SpawningNewWava,InProgress,WaveCompleted,AllWavesDown,PlayerDied
};//敌人波数的信息
USTRUCT(BlueprintType)
struct FXMBEnemyWaveSpawnerInfo
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly)TSoftClassPtr<AEnemyBase> SoftEnemyClassToSpawn;UPROPERTY(EditAnywhere)int32 MinPerSpawnCount = 1;UPROPERTY(EditAnywhere)int32 MaxPerSpawnCount = 1;};//敌人波数定义
USTRUCT(BlueprintType)
struct FXMBEnemyWaveSpawnerTableRow : public FTableRowBase
{GENERATED_BODY()UPROPERTY(EditAnywhere)TArray<FXMBEnemyWaveSpawnerInfo> EnemyWaveSpawnerDefinitions;UPROPERTY(EditAnywhere)int32 TotalEnemyToSpawnThisWave = 1;};//广播当前敌人攻击波数
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSurvialGameModeStateChanged, EXMBSurvialGameModeState, CurrentState);/*** */
UCLASS()
class ARPG_GRIVITY_API AXMBSurvialGameMode : public AXMBGameModeBase
{GENERATED_BODY()protected:virtual void BeginPlay() override;virtual void Tick(float DeltaTime) override;private://void SetCurrentSurvialGameModeState(EXMBSurvialGameModeState Instate);//判断是否完成当前波数bool HasFinishedAllWaves() const;//当前波数UPROPERTY()EXMBSurvialGameModeState CurrentSurvialGameModeState;//波数委托UPROPERTY(BlueprintAssignable,BlueprintCallable)FOnSurvialGameModeStateChanged OnSurvialGameModeStateChanged;//敌人波数的表格UPROPERTY(EditDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))UDataTable* EnemyWaveSpawnerDataTable;//生成前的倒计时UPROPERTY(EditDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))float SpawnNewWavesWaitTime = 5.f;//到达下一波的时间UPROPERTY(EditDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))	float WaveCompletedWaitTime = 5.f;//总共袭击波数UPROPERTY(VisibleDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))int32 TotalWavesToSpawn;//生成敌人的延迟,用于处理uiUPROPERTY(VisibleDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))float SpawnEnemiesDelayTime = 2.f;//当前敌人波数UPROPERTY(VisibleDefaultsOnly,BlueprintReadOnly, Category = "WaveDefinition", meta = (AllowPrivateAccess = "true"))int32 CurrentWaveCount = 1;//记录经过了多长时间UPROPERTY()float TimePassedSinceStart = 0.f;
};
// Fill out your copyright notice in the Description page of Project Settings.#include "GameMode/XMBSurvialGameMode.h"void AXMBSurvialGameMode::BeginPlay()
{Super::BeginPlay();checkf(EnemyWaveSpawnerDataTable,TEXT("Forgot to assign a valid datat table in survial game mode blueprint"));SetCurrentSurvialGameModeState(EXMBSurvialGameModeState::WaitSpawnNewWava);//TotalWavesToSpawn = EnemyWaveSpawnerDataTable->GetRowNames().Num();
}void AXMBSurvialGameMode::Tick(float DeltaTime)
{Super::Tick(DeltaTime);//检查是否处于等待状态if (CurrentSurvialGameModeState == EXMBSurvialGameModeState::WaitSpawnNewWava){TimePassedSinceStart += DeltaTime;//时间到了,要到下一波if (TimePassedSinceStart >= SpawnNewWavesWaitTime){TimePassedSinceStart = 0.f;SetCurrentSurvialGameModeState(EXMBSurvialGameModeState::SpawningNewWava);}}//检查是否处于正在进行时if (CurrentSurvialGameModeState == EXMBSurvialGameModeState::SpawningNewWava){TimePassedSinceStart += DeltaTime;if (TimePassedSinceStart >= SpawnEnemiesDelayTime){//TODO: Handle spawn new enemiesTimePassedSinceStart = 0.f;SetCurrentSurvialGameModeState(EXMBSurvialGameModeState::InProgress);}}//检查是否处于进行中if (CurrentSurvialGameModeState == EXMBSurvialGameModeState::InProgress){TimePassedSinceStart += DeltaTime;if (TimePassedSinceStart >= WaveCompletedWaitTime){TimePassedSinceStart = 0.f;CurrentWaveCount++;//检查是否完成if (HasFinishedAllWaves()){SetCurrentSurvialGameModeState(EXMBSurvialGameModeState::AllWavesDown);}else{SetCurrentSurvialGameModeState(EXMBSurvialGameModeState::WaitSpawnNewWava);}}}}void AXMBSurvialGameMode::SetCurrentSurvialGameModeState(EXMBSurvialGameModeState Instate)
{CurrentSurvialGameModeState = Instate;OnSurvialGameModeStateChanged.Broadcast(CurrentSurvialGameModeState);
}bool AXMBSurvialGameMode::HasFinishedAllWaves() const
{return CurrentWaveCount > TotalWavesToSpawn;	
}

http://www.dtcms.com/a/289775.html

相关文章:

  • 30天打牢数模基础-AdaBoost讲解
  • CICS Application Programming Fundamentals 第8-6章
  • arinc818_icd设计范例
  • LLVM中AST节点类型
  • RGB颜色值如何转到灰度值
  • [每日随题14] 递推 - 滑动窗口 - 数学
  • JavaScript 中Object、Array 和 String的常用方法
  • java抗疫物质管理系统设计和实现
  • 【超分辨率专题】OSEDiff:针对Real-World ISR的单步Diffusion
  • [FDBUS 4.2]fdbus消息发送失败后的流程处理
  • SigLIP和SigLIP2
  • 题单【循环结构】
  • maven构建Could not transfer artifact失败原因
  • 系统思考:整体论
  • 【成品设计】基于STM32的家庭用水检测系统设计
  • 2025《艾诺提亚失落之歌》新手攻略
  • 看板中如何处理跨职能任务协作?
  • 大模型词表设计与作用解析
  • Autosar RTE实现观测量生成-基于ETAS软件
  • [Python] -项目实践2- 用Python快速抓取网页内容(爬虫入门)
  • python网络爬虫小项目(爬取评论)超级简单
  • 阶段1--Linux中的计划任务
  • 调试Claude code的正确姿势
  • 类型混淆、越界写入漏洞
  • 基于单片机出租车计价器设计
  • 重塑优化建模与算法设计:2024上半年大模型(LLM)在优化领域的应用盘点
  • Java入门-【3】变量、字符串、条件、循环、数组的简单总结
  • python 字典中取值
  • SQL189 牛客直播各科目同时在线人数
  • MySQL事物相关