UE5/C++ 基于GAS的怪物AI 6.3.2 创建怪物的生成点

2023-10-12 08:59
文章标签 c++ ai 创建 生成 6.3 ue5 gas 怪物

本文主要是介绍UE5/C++ 基于GAS的怪物AI 6.3.2 创建怪物的生成点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.

打开UE引擎,创建TargetPoint C++类,命名为MMOARPGAISpawnPoint

 打开MMOARPGAISpawnPoint.h

#pragma once#include "CoreMinimal.h"
#include "Engine/TargetPoint.h"
#include "MMOARPGAISpawnPoint.generated.h"/*** */
UCLASS()
class MMOARPGGAME_API AMMOARPGAISpawnPoint : public ATargetPoint
{GENERATED_BODY()
public:UPROPERTY(EditAnywhere, Category = "AISpawn")int32 CharacterID;//角色IDUPROPERTY(EditAnywhere, Category = "AISpawn")int32 Lv;//等级UPROPERTY(EditAnywhere, Category = "AISpawn")bool bScopeSpawnAI;//是否范围性生成UPROPERTY(EditAnywhere, Category = "AISpawn", meta = (EditCondition = "bScopeSpawnAI"))float SpawnAIRadius;//生成半径UPROPERTY(EditAnywhere, Category = "AISpawn", meta = (EditCondition = "bScopeSpawnAI"))int32 SpawnAINumberInRange;//范围内怪物生成数量
public:AMMOARPGAISpawnPoint();virtual void BeginPlay() override;virtual void EndPlay(const EEndPlayReason::Type EndPlayReason);virtual void Tick(float DeltaTime) override;protected:void SpawnAICharacter(int32 CharacterID,int32 InLV);
};

进行实现

// Fill out your copyright notice in the Description page of Project Settings.#include "MMOARPGAISpawnPoint.h"
#include "../Character/Core/MMOARPGCharacterBase.h"
#include "../MMOARPGGameState.h"AMMOARPGAISpawnPoint::AMMOARPGAISpawnPoint()
{CharacterID = INDEX_NONE;Lv = 1;bScopeSpawnAI = false;SpawnAIRadius = 500.f;SpawnAINumberInRange = 3;
}void AMMOARPGAISpawnPoint::BeginPlay()
{Super::BeginPlay();if (GetWorld() && GetWorld()->IsServer()){//在BeginPlay中生成SpawnAICharacter(CharacterID, Lv);}
}void AMMOARPGAISpawnPoint::EndPlay(const EEndPlayReason::Type EndPlayReason)
{Super::EndPlay(EndPlayReason);
}void AMMOARPGAISpawnPoint::Tick(float DeltaTime)
{Super::Tick(DeltaTime);
}void AMMOARPGAISpawnPoint::SpawnAICharacter(int32 InCharacterID, int32 InLV)
{if (GetWorld()){if (AMMOARPGGameState* InGameState = GetWorld()->GetGameState<AMMOARPGGameState>()){//通过角色ID获取角色属性数据表if (FCharacterAttributeTable* InAttributeTable = InGameState->GetCharacterAttributeTable(InCharacterID)){//通过角色ID获取角色类数据表if (FCharacterStyleTable* InCharacterTable = InGameState->GetCharacterStyleTable(InCharacterID)){TArray<FVector>Locations;if (bScopeSpawnAI)//是否范围生成怪物{for (int32 i=0;i<SpawnAINumberInRange;i++){FVector Origin = GetActorLocation();FVector2D Point = FMath::RandPointInCircle(SpawnAIRadius);//在范围内随机生成一个点,用于怪物随机生成Locations.Add(Origin + FVector(Point.X, Point.Y, 0.f));}}else{Locations.Add(GetActorLocation());}//遍历生成位置for (auto& Location : Locations){if (AMMOARPGCharacterBase* InCharacterBase = GetWorld()->SpawnActor<AMMOARPGCharacterBase>(InCharacterTable->MMOARPGChearacterClass,//要生成的角色类Location,//生成位置FRotator::ZeroRotator))//旋转{}}}}}}
}

2.

打开UE引擎,在文件夹中找到生成点

然后将其拖拽到场景,进行配置

这篇关于UE5/C++ 基于GAS的怪物AI 6.3.2 创建怪物的生成点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194746

相关文章

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL