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

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

三频BE12000国补到手2549元! ROG 魔盒Pro WIFI7电竞AI路由器上架

《三频BE12000国补到手2549元!ROG魔盒ProWIFI7电竞AI路由器上架》近日,华硕带来了ROG魔盒ProWIFI7电竞AI路由器(ROGSTRIXGR7Pro),目前新... 华硕推出了ROG 魔盒Pro WIFI7电竞AI路由器(ROG STRIX GR7 Phttp://www.cppcn

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.