UE4
文章平均质量分 84
JK Chen
ACM退役选手,战绩4金6银
展开
-
Unreal 智能指针原理分析
TSharedPtr,有两个成员,占用 16 个字节,分别是对象指针和引用控制器。控制器内有两个计数器 Shared 和 Weak。TWeakPtr 内的是 FWeakReferencer,其内部也是 TReferenceControllerWithDeleter,之所以有区分,可以看下小节TSharedRef 内部和 TSharedPtr 基本一致,没有提供空构造函数,而且在赋值和构造函数内,都会用 check 保证指针非空。原创 2024-05-26 17:18:41 · 300 阅读 · 0 评论 -
Unreal AI 感知模块解析
一般是直接调用AActor::MakeNoise进行发声,调用流程大致是:在UAIPerceptionSystem的Tick内,调用每种已注册的UAISense的Tick,进行Update,这个是所有AISense感知的主要函数在UAISense_Hearing::Update内,对于每个Listener(FPerceptionListener,包含感知组件、队伍ID等数据),分别对每个FAINoiseEvent进行处理,是否能被听到是依据:这里还用了一个延时处理(PerseptionSys->Regist原创 2023-01-06 11:32:47 · 971 阅读 · 0 评论 -
UE AIPerception感知非Pawn对象
AI之所以只感知Pawn,是因为被感知的对象需要手动注册,而非全局搜索。在BeginPlay阶段,为所有的AISense,调用RegisterAllPawnsAsSourcesForSense并且之后再通过RegisterSenseClass新注册的AISense,也会调用RegisterAllPawnsAsSourcesForSenseRegisterAllPawnsAsSourcesForSense则是检索所有的Pawn进行注册处理新生成的Pawn在UAISystem::PostInitProp原创 2022-12-05 15:39:03 · 532 阅读 · 0 评论 -
Unreal 寻路系统介绍
首先,在项目设置内,Navigation System 内可以配置一些Agents。原创 2022-10-26 12:44:01 · 2596 阅读 · 2 评论 -
在UE内添加控制台工程(Programs)
在下新建文件夹 XmlToProto内部新建文件夹Source,以及5个文件,文件内容见最下方cmd 运行UBT会刷新.sln项目文件,之后重新打开VS就可以看到该工程了可以像正常项目一样引用模块、插件(PublicDependencyModuleNames)把主流程写到 XmlToProtoMainWindows.cpp 内的main函数内即可(RequestEngineExit之前,且这个函数不能跳过)XmlToProto.Build.csXmlToProto.Target.cs原创 2022-06-22 15:39:12 · 581 阅读 · 0 评论 -
UE 添加模块的全局宏
在XXX.build.cs内,添加PublicDefinitions.Add("MacroName=MacroBody");即可。这个是基于文本的填充,所以可以写各种花里胡哨的 MacroBody,例如:PublicDefinitions.Add("MACRONAME_AAA(x)=for(int32 i=0;i<x;++i)");在 Build 后,在 Intermediate\Build 内会生成 Definitions.ModuleName.h 的文件,内部就包含了这样一句宏#defi原创 2022-05-20 11:25:38 · 1063 阅读 · 0 评论 -
UE5 StateTree
文章目录After all状态转移数据配置方式After allStateTree就是分层状态机,稍稍结合一点Sequence目前比较简陋,提供的节点就几个,大部分都要自己写,例如PlayMontage、Wait、MoveTo、EQS等模型比较像行为树加一个Goto,EnterCondition=Decorator,Upper Task=Service,State=CompositeNode状态转移子状态激活时,上级状态也处于激活状态。此时如果满足上级状态的转移条件,会发生转移怎么转移进入原创 2022-04-10 18:56:55 · 3422 阅读 · 0 评论 -
UE5 引擎源码版
https://www.epicgames.com/account/connections#accountshttps://github.com/EpicGames之后有一个提示邀请你加入Epic Team,确认之后在https://github.com/orgs/EpicGames/repositories?type=all里面就可以看到仓库链接:https://github.com/EpicGames/UnrealEngine切换分支下载源码......原创 2022-01-12 11:18:47 · 11140 阅读 · 0 评论 -
Unreal - Environment Query System(EQS)
文章目录什么是EQS形成测试点评分标准化什么是EQS在指定区域内形成测试点根据环境(战场情况)对每个测试点做出评分,最后选出一个评分最高的点结果:提供下一次Do Something的较佳目标点,例如AI的移动形成测试点以环形为例评分当DistanceTo存在多个时(EQContent),每个各自算出评分,最后通过Multiply Content Score Op算出最后的分数标准化参考函数:void UEnvQueryTest::NormalizeItemScores(原创 2022-04-01 15:29:18 · 632 阅读 · 0 评论 -
Unreal-GAS 源码解析:同步、预测
GameplayAbility赋予能力UGameplayAbility* AbilityAbilitySystemComponent->GiveAbility(FGameplayAbilitySpec(Ability, 0, INDEX_NONE, this))// ActivatableAbilities 所有可激活的能力数组UPROPERTY(ReplicatedUsing=OnRep_ActivateAbilities, BlueprintReadOnly, Category =原创 2022-02-25 16:01:24 · 2382 阅读 · 0 评论 -
UE源码解析:UCharacterMovementComponent - RootMotion
Montage部分最后的产出RootMotionMontageInstance外部通过UAnimInstance::GetRootMotionMontageInstance获取FAnimMontageInstance * ACharacter::GetRootMotionAnimMontageInstance() const{ return (Mesh && Mesh->GetAnimInstance()) ? Mesh->GetAnimInstance()->原创 2022-02-14 15:42:30 · 1337 阅读 · 0 评论 -
Copy视频动作到UE | plask
打开https://plask.ai/,注册登录Get Started找一个视频,下载或者录屏拖入库下方可以左右调整,确认之后按下Extract Motion导出动画拖动库中生成的动画到骨骼上然后拖入场景导出下载速度捉急操作快捷键视图页面:Alt+LMB 改变角度Alt+RMB 移动滚轮 放大缩小H 摄像机归位K 插入关键帧帧页面:滚轮 缩放时间轴鼠标点击 单选Alt 多选右键选择删除选中后可以拖动位置,也可以Ctrl C V进行复制粘贴骨骼:W原创 2022-01-22 22:38:33 · 2540 阅读 · 0 评论 -
UE4 行为树节点C++
参考 Engine\Source\Runtime\AIModule\Classes\BehaviorTree\Tasks\BTTask_MoveTo.h运行运行virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory);进入非激活状态触发virtual void OnGameplayTaskDeactivated(UGameplayTask&.原创 2021-06-30 10:59:18 · 1788 阅读 · 2 评论 -
UE源码解析:UCharacterMovementComponent - 模拟端平滑
实现关键信息: 位置、朝向、速度Actor内有一个FRepMovement用于存根组件的移动// 根组件移动UPROPERTY(EditDefaultsOnly, ReplicatedUsing=OnRep_ReplicatedMovement, Category=Replication, AdvancedDisplay)struct FRepMovement ReplicatedMovement;修改ReplicatedMovement的调用链:int64 UReplicationGrap原创 2022-01-16 17:25:26 · 1331 阅读 · 0 评论 -
UE4 & C++ 笔记
创建名为Name的USceneComponent组件对象USceneComponent* P = CreateDefaultSubobject<USceneComponent>(TEXT("Name"));开启TickPrimaryActorTick.bCanEverTick = true;资源查找器static ConstructorHelpers::FObjectFinder<资源类别> CubeVisualAsset(TEXT("资源路径"));if..原创 2021-02-25 18:53:29 · 4895 阅读 · 1 评论 -
UE4:AI‘s MoveTo——代码分析
路径寻找void UGameplayTask::PerformActivation()void UAITask_MoveTo::Activate()void UAITask_MoveTo::ConditionalPerformMove()void UAITask_MoveTo::PerformMove()FPathFollowingRequestResult AAIController::MoveTo(const FAIMoveRequest& MoveRequest, FNavPathS原创 2021-09-06 15:55:50 · 3067 阅读 · 0 评论 -
游戏AI浅谈
没有系统学习过,写的都是自己的使用感受状态机在接触游戏AI之前,如果让一个人去实现游戏里面的AI,那么一般都会使用状态机。反正我是这样,之前在Unity写C#的时候,就用纯代码写了个怪AI,分为很多状态,达成某些条件的时候进行状态的跳转。因为状态机可以朴素得表达人类思维,我在什么状态就干什么事。但是当状态特别特别多的时候,状态之间的跳转和维护就很折磨,心智负担较大。这时候就出现了分层状态机,把状态进行划分,同级的状态之间进行跳转。虽然我没用过,但是想想应该也就那回事,无非是状态机的优化罢了。行为.原创 2021-08-25 15:53:01 · 1537 阅读 · 0 评论 -
UE4 HTN插件源码解析
计划制定部分总结最小代价算法UAITask_MakeHTNPlan内部有一个TArray<TSharedPtr<FHTNPlan>> Frontier,通过HeapPush和HeapPop维护小顶堆,每次都能取出代价最小的Plan进行拓展。ACM入门算法,学名堆优化BFS,需要保证步长(即代价)非负。由于每次选择最小代价方案,且代价非负,当堆首方案成功完成时,一定是所有方案中代价最小的之一(可能有其它相同的),也就是DoPlanning中的Planning succee原创 2021-08-23 22:09:14 · 1225 阅读 · 2 评论 -
UE4 HTN插件使用说明
介绍HTN的优势就是可以对未来进行规划(全局最优、全局代价最小),所以可以轻松做到多个盒子和球,分别到达一次盒子和一次球,总时间最短这种事情内部有一个Loop-Submit,相当于一个任务在规划时创建多个分支,会对每种分支进行代价计算流程计划制定:根据Task(可多次提交、通过worldstate剪枝)、复合节点(If等)、装饰器(通过worldstate剪枝)创建出很多个可选计划计划选择:从中选择一个代价最小的计划进行执行计划执行:一步一步执行计划,直到执行完毕或者计划不合法(任务失败原创 2021-08-18 17:44:07 · 1484 阅读 · 3 评论 -
HTN框架介绍、开发心得
任务(Task)任务分为两种,原始任务(Primitive Task) 和 复合任务(Compound Task)。原始任务是一个可以直接执行的 操作(operator) ,例如移动到目标。而复合任务则是有多种 实现方法(Method) 的任务,并且每种实现方法都是一个 任务集合(The set of tasks),可以包含复合任务和原始任务,例如AttackEnemy(寻敌、移动、攻击…)。多种实现方法之间进行选择,例如攻击可以近战和远程,如果距离比较远就使用远程攻击。UE4 - 原始任务和UE原创 2021-07-19 15:14:33 · 8783 阅读 · 0 评论