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

相关文章

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.