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

陕西网站建设平台宁波seo推广方式排名

陕西网站建设平台,宁波seo推广方式排名,wordpress 改域名db,后海做网站公司从官方论坛老哥那学来的,优点在于使用项目设置,像配置碰撞一样,能配置碰撞通道对其他碰撞通道的反应,如阻挡,忽略,重叠,全局配置队伍归属,也能配置当前队伍对其他队伍的身份识别&…

从官方论坛老哥那学来的,优点在于使用项目设置,像配置碰撞一样,能配置碰撞通道对其他碰撞通道的反应,如阻挡,忽略,重叠,全局配置队伍归属,也能配置当前队伍对其他队伍的身份识别,如队友,中立,敌人。最终效果看最后的测试How do I use the AI Perception Teams? - #2 by Gossy - C++ - Epic Developer Community Forums

一、定义队伍枚举:

Team.h

#pragma once
#include "GenericTeamAgentInterface.h"
#include "Team.generated.h"UENUM(BlueprintType)
enum class EGameTeam: uint8
{Neutral,Team1,Team2,Team3,Team4
};USTRUCT(BlueprintType)
struct FTeamAttitude
{GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="")TArray<TEnumAsByte<ETeamAttitude::Type>> Attitude;FTeamAttitude() {};FTeamAttitude(std::initializer_list<TEnumAsByte<ETeamAttitude::Type>> attitudes):Attitude(std::move(attitudes)){ };
};

FTeamAttitude意在包裹一维数组,因为引擎不支持二维数组。所偶一用TArray<FTeamAttitude>来组成二维数组。
二、自定义项目设置
自定义项目设置使用UDeveloperSettings类。需要使用DeveloperSettings模块

MyGameSettings.h

MyGameSettings.cpp

#include "MyGameSettings.h"
ETeamAttitude::Type UMyGameSettings::GetAttitude(FGenericTeamId SourceTeam, FGenericTeamId TargetTeam)
{auto & TeamAttitudes = GetDefault<UMyGameSettings>()->TeamAttitudes;bool SourceValid = TeamAttitudes.IsValidIndex(SourceTeam.GetId());bool TowardValid = TeamAttitudes.IsValidIndex(TargetTeam.GetId());if (SourceValid && TowardValid){auto & Attitudes = TeamAttitudes[SourceTeam.GetId()].Attitude;if (Attitudes.IsValidIndex(TargetTeam.GetId())){return Attitudes[TargetTeam.GetId()];}}return ETeamAttitude::Neutral;
}

GetCatrgoryName表示大标题名,GetSectionName表示小标题,UPROPERTY(Category = "")表示标签。UClass(MyCustomSettings,DefaultConfig)表示存储在Config/DefualtMyCustomSettings中(第一次修改后才会出现这个文件)


GetAttitude提供解析这个二维数组方法。通过传入源队伍和目标队伍,得知源队伍对目标队伍的态度。
这个方法要配合FGenericTeamId::SetAttitudeSolver使用



在GameMode.PlayStart中将GetAttitude方法传入即可。

// Fill out your copyright notice in the Description page of Project Settings.#include "LCGameMode.h"#include "GenericTeamAgentInterface.h"
#include "MyGameSettings.h"void ALCGameMode::StartPlay()
{Super::StartPlay();FGenericTeamId::SetAttitudeSolver(&UMyGameSettings::GetAttitude);
}

追踪一下这个方法在哪里被使用到

void FGenericTeamId::SetAttitudeSolver(const FGenericTeamId::FAttitudeSolverFunction& Solver)
{AttitudeSolverImpl = Solver;
}

FGenericTeamId

在这个函数中,会调用解析方法判断态度,如果没设置解析方法,则返回中立。
IGenericTeamAgentInterface:


在IGenericTeamAgentInterface中,获取对其他Actor态度时就是调用这个方法。


而AIController就是实现了这个接口来获取对其他Actor的态度。

总结:AIController最终调用了在GameMode中设置的解析方法来解析项目设置中的二维数组来判断归属,并决定检测还是不检测。
 

三、设置Actor的归属。
1.实现IGenericTeamAgentInterface中的SetGenreicTeamId与GetGenericTeamId接口。

对于玩家,声明Team变量

将TeamId的Setter,Getter转换一下成自己的枚举。
2.对于AIController做相同的操作。因为AIController判断归属时,是将传进来的Actor转换成IGenericTeamAgentInterface,然后将自己和Actor的TeamId传入判断态度。
3.对于AIController控制的NPC,也实现这个接口,用于让AIController判断NPC的身份。

Getter和Setter都调用AIController的Getter和Setter.

至此,玩家和敌人的团队也都设置好了。

四、AI感知

AIController内置了一个AI感知组件的变量,并且在PostRegisterComponent中查找自身有没有这个组件,然后赋值给这个变量,所以起始不内置这个组件


所以需要自己在构造函数中构造这个组件。我顺便添加以下视觉感知,并设置仅感知敌人。

至此大功告成。来测试测试。写了3100字,终于配置好了AI感知和归属检测(汗)
五、测试

设置三个队伍,Team1,Team2,Team3。如下


Team1对Team1友好,对其他中立。

Team2对Team1中立,对Team2友好,对其他敌对。

Team3对Team1中立,对Team3友好,对其他敌对。

测试场景:

1.设置仅检测敌对:

2.设置检测敌对和中立

3.设置全部检测


4.当场更改一下项目设置,Team3对Team1也敌对,看看对Team1会不会由中立变为敌对。


1.仅检测中立:

2.仅检测敌人:

设置生效了,Team1不再被Team3视为中立,而是视为敌人!

总结:这次的论坛老哥很给力。让我学习到了DeveloperSettings类的使用,还有对AI队伍归属机制的进一步理解,并成功实现使用项目设置配置队伍归属权,拓展性更好。进一步的研究可能是怎么将项目设置配置成像碰撞配置那样简洁明了,并且可以在Actor中覆盖。

http://www.dtcms.com/wzjs/337125.html

相关文章:

  • 怎么做网站制作百度里面的站长工具怎么取消
  • 微信网站建站平台怎么让某个关键词排名上去
  • 萌兔网站做代销可靠吗东莞快速排名
  • 网站建设都包括哪些方面网站技术外包公司
  • 网站策划书基本内容百度招商客服电话
  • 南阳 网站建设制作网页的基本步骤
  • 深圳高端网站建设创新百度快照是啥
  • 偃师企业网站数据统计网站有哪些
  • 织梦网站导入链接怎么做网站的搜索引擎
  • 网站点赞功能sem推广托管公司
  • 用.cc做网站官网可以吗上海app网络推广公司电话
  • 视频网站怎么做统计谷歌推广外贸建站
  • 杭州省建设厅网站百度指数排行榜
  • 做网站用什么版本系统给你一个网站seo如何做
  • 网站规划与建设模板长春关键词优化排名
  • 腾讯分分彩做号网站适合女生去的培训机构
  • 南宁市网站建设百度人工服务热线24小时
  • 百度搜索官方网站软文推广方案
  • 一台vps可以做几个网站充电宝seo关键词优化
  • 不会代码可以做网站吗产品运营方案
  • d?t网站模版营销模式都有哪些
  • 做网站的广告语描述建设一个网站的具体步骤
  • 聚名网站aso优化前景
  • 制作网站制作2345浏览器网址导航
  • ps做网站ui培训优化
  • 上海网站营销牡丹江seo
  • 各大网站rss地址软文广告案例分析
  • 正能量网站入口不用下载免费宁波seo网络推广定制
  • 江门网站制作计划百度官方优化指南
  • 网站建设是什么意思 打不开小红书sem是什么意思