All
文章平均质量分 59
合集
JK Chen
ACM退役选手,战绩4金6银
展开
-
unreal UObject序列化
会和CDO进行比较,将不同的属性序列化进去,依据FPropertyTag解决结构不完整的问题先复制一份CDO,然后将序列化的属性设置到Object内if(!原创 2023-04-28 10:35:52 · 918 阅读 · 1 评论 -
unreal 关于贴图在缩小后的清晰度
Texture Group 默认 World就好,Mip Gen Settings 改为 TMGS_FromTextureGroup,Filter 改为 TF_Trilinear。Anti-Aliasing Method 用默认的 AAM_TemporalAA 就好。噪点:在no mip的情况下,直接缩小会产生严重的锯齿,然后抗锯齿算法计算导致不稳定。原创 2023-04-19 00:17:41 · 272 阅读 · 0 评论 -
UnrealEditor-RHI.dll 没有被指定在windows上运行
去 Engine\Binaries\Win64 目录下,删除 UnrealEditor-RHI.dll,重新编译即可。原创 2023-03-29 16:35:18 · 839 阅读 · 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 · 1361 阅读 · 0 评论 -
Unreal 读写自定义配置文件
上面的方式,要么需要手动写配置文件,要么需要主动调用SaveConfig,比较不直观。在开发过程中的一些参数,想要方便的调整,可以创建一个类继承自UDeveloperSettings。在修改项目设置的时候,会生成 / 保存到对应的ini文件,当UCLASS存在defaultconfig时,ini文件将会生成到。首先需要自定义一个继承自UObject的类,UCLASS加上config标志。将想要和配置文件交互的属性,UFUNCTION加上Config标志。需要在过程中恢复设置内的配置,需要手动加载。原创 2022-12-27 15:56:54 · 2495 阅读 · 0 评论 -
UE AIPerception感知非Pawn对象
AI之所以只感知Pawn,是因为被感知的对象需要手动注册,而非全局搜索。在BeginPlay阶段,为所有的AISense,调用RegisterAllPawnsAsSourcesForSense并且之后再通过RegisterSenseClass新注册的AISense,也会调用RegisterAllPawnsAsSourcesForSenseRegisterAllPawnsAsSourcesForSense则是检索所有的Pawn进行注册处理新生成的Pawn在UAISystem::PostInitProp原创 2022-12-05 15:39:03 · 647 阅读 · 0 评论 -
Unreal 寻路系统介绍
首先,在项目设置内,Navigation System 内可以配置一些Agents。原创 2022-10-26 12:44:01 · 3532 阅读 · 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 · 650 阅读 · 0 评论 -
C++类成员函数返回类型推断、模板封装getter和setter
C++类成员函数返回类型推断、模板封装getter和setter原创 2022-06-06 14:54:00 · 955 阅读 · 1 评论 -
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 · 1187 阅读 · 0 评论 -
C 宏与注释
宏内部无法使用 // 进行注释,这样末尾无法使用反斜杠进行换行#define AAA axax\/*注释*/ \ax /* 多 行 注 释 */ \axax原创 2022-05-06 16:51:48 · 525 阅读 · 0 评论 -
正则表达式
学习测试替换:在匹配的表达式内,使用()截取部分字符,在替换表达式内,使用$N代表第N个截取内容。例如想要匹配#include <GameCore/XXX.h>#include<GameCore/XXX.cpp>那么匹配表达式就是:// \s* :任意个空白字符// .* :任意个任意字符#include\s*<(.*)>我们都知道<>用于引用系统文件,想要改为"",并且统一一下格式,那么替换的表达式就是:#include "$1原创 2022-04-15 17:04:29 · 187 阅读 · 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 · 3786 阅读 · 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 · 770 阅读 · 0 评论 -
关闭 切换Caplock时出现在屏幕的提示图案
右键 - 显示设置 - 高级显示设置 - 显示适配器属性 - 屏幕配置 - 启用屏幕显示 取消勾选原创 2022-03-21 15:45:11 · 5020 阅读 · 2 评论 -
Windows修改桌面、下载、垃圾桶、照片等默认位置
好处:减轻系统盘大小压力、系统重装的时候不会丢数据右键图标 - 属性 - 位置 - 移动应用原创 2022-03-08 17:39:40 · 452 阅读 · 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 · 2973 阅读 · 0 评论 -
升级VS后,小番茄出问题
卸载VA注册表,删除HKEY_CURRENT_USER/SOFTWARE/WHOLE TOMATO下面的项管理员运行Trial-reset扫描,清除重新安装VA复制PatchVCS_0.9.2.5文件夹到VS安装目录(C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\)管理员运行PatchVCS_0.9.2.3.exe,弹出对话框内选中当前目录下的devenv.exe...原创 2022-02-25 14:29:48 · 833 阅读 · 0 评论 -
UE源码解析:UCharacterMovementComponent - RootMotion
Montage部分最后的产出RootMotionMontageInstance外部通过UAnimInstance::GetRootMotionMontageInstance获取FAnimMontageInstance * ACharacter::GetRootMotionAnimMontageInstance() const{ return (Mesh && Mesh->GetAnimInstance()) ? Mesh->GetAnimInstance()->原创 2022-02-14 15:42:30 · 1501 阅读 · 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 · 2570 阅读 · 0 评论 -
UE源码解析:UCharacterMovementComponent - 模拟端平滑
实现关键信息: 位置、朝向、速度Actor内有一个FRepMovement用于存根组件的移动// 根组件移动UPROPERTY(EditDefaultsOnly, ReplicatedUsing=OnRep_ReplicatedMovement, Category=Replication, AdvancedDisplay)struct FRepMovement ReplicatedMovement;修改ReplicatedMovement的调用链:int64 UReplicationGrap原创 2022-01-16 17:25:26 · 1485 阅读 · 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 · 11416 阅读 · 0 评论 -
UE Error:Cannot Flush Async Loading while async loading is suspended
开始游戏时调用AsyncLoadGameFromSlot报错原因:我在GameInstance::OnStart内调用,可能有一些初始化任务没有完成,无法异步加载解决办法:SetTimer 0.1s,让世界初始化之后再去异步加载原创 2022-01-07 19:40:46 · 2255 阅读 · 0 评论 -
converting to execution character set: Illegal byte sequence
这种情况是因为源代码文件的编码方式问题,比如出现中文字但是文件编码方式确是ANSII。解决方式是关闭IDE,使用记事本打开,再另存为,编码方式使用UTF8.原创 2021-09-27 20:29:34 · 1695 阅读 · 0 评论 -
文本替换工具:快速生成重复代码
例如替换内容: tmp.pb({"bool", "int32"}); tmp.pb({"Bool", "Int"}); tmp.pb({"bool", "float"}); tmp.pb({"Bool", "Float"}); tmp.pb({"bool", "FString"}); tmp.pb({"Bool", "String"});……输入: UPROPERTY(EditAnywhere, BlueprintReadWrite)原创 2021-09-27 20:26:08 · 357 阅读 · 0 评论 -
Win10历史剪贴板 Win+V无法打开问题
右键 以管理员身份运行输入DISM /Online /Add-Capability /CapabilityName:Windows.Client.ShellComponents~~~~0.0.1.0然后Win+V即可原创 2021-09-14 17:53:58 · 6920 阅读 · 7 评论 -
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 · 3324 阅读 · 0 评论 -
游戏AI浅谈
没有系统学习过,写的都是自己的使用感受状态机在接触游戏AI之前,如果让一个人去实现游戏里面的AI,那么一般都会使用状态机。反正我是这样,之前在Unity写C#的时候,就用纯代码写了个怪AI,分为很多状态,达成某些条件的时候进行状态的跳转。因为状态机可以朴素得表达人类思维,我在什么状态就干什么事。但是当状态特别特别多的时候,状态之间的跳转和维护就很折磨,心智负担较大。这时候就出现了分层状态机,把状态进行划分,同级的状态之间进行跳转。虽然我没用过,但是想想应该也就那回事,无非是状态机的优化罢了。行为.原创 2021-08-25 15:53:01 · 1618 阅读 · 0 评论 -
UE4 HTN插件源码解析
计划制定部分总结最小代价算法UAITask_MakeHTNPlan内部有一个TArray<TSharedPtr<FHTNPlan>> Frontier,通过HeapPush和HeapPop维护小顶堆,每次都能取出代价最小的Plan进行拓展。ACM入门算法,学名堆优化BFS,需要保证步长(即代价)非负。由于每次选择最小代价方案,且代价非负,当堆首方案成功完成时,一定是所有方案中代价最小的之一(可能有其它相同的),也就是DoPlanning中的Planning succee原创 2021-08-23 22:09:14 · 1316 阅读 · 2 评论 -
UE4 HTN插件使用说明
介绍HTN的优势就是可以对未来进行规划(全局最优、全局代价最小),所以可以轻松做到多个盒子和球,分别到达一次盒子和一次球,总时间最短这种事情内部有一个Loop-Submit,相当于一个任务在规划时创建多个分支,会对每种分支进行代价计算流程计划制定:根据Task(可多次提交、通过worldstate剪枝)、复合节点(If等)、装饰器(通过worldstate剪枝)创建出很多个可选计划计划选择:从中选择一个代价最小的计划进行执行计划执行:一步一步执行计划,直到执行完毕或者计划不合法(任务失败原创 2021-08-18 17:44:07 · 1571 阅读 · 3 评论 -
UBTDecorator_BlueprintBase源码分析
自己写装饰器最好看一下这个类TickNode当前执行的节点在父节点代表的子树内时,这个函数会执行满足以下条件的时候PerformConditionCheckImplementations != 0 && (bIsObservingBB == false || bCheckConditionOnlyBlackBoardChanges == false)会执行GetShouldAbort(OwnerComp),判断是否需要终止,运行当前节点OwnerComp.RequestExec原创 2021-08-11 15:55:27 · 371 阅读 · 0 评论 -
Blockly源码解析
https://blockly.games/https://www.scratch-cn.cn/https://developers.google.com/blocklyhttps://developers.google.com/closure原创 2021-08-09 11:23:38 · 3009 阅读 · 0 评论 -
HTN框架介绍、开发心得
任务(Task)任务分为两种,原始任务(Primitive Task) 和 复合任务(Compound Task)。原始任务是一个可以直接执行的 操作(operator) ,例如移动到目标。而复合任务则是有多种 实现方法(Method) 的任务,并且每种实现方法都是一个 任务集合(The set of tasks),可以包含复合任务和原始任务,例如AttackEnemy(寻敌、移动、攻击…)。多种实现方法之间进行选择,例如攻击可以近战和远程,如果距离比较远就使用远程攻击。UE4 - 原始任务和UE原创 2021-07-19 15:14:33 · 9238 阅读 · 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 · 1938 阅读 · 2 评论 -
UE4 GAS/ActionRPG学习导图——Main(Gameplay Ability System)
参考资料YouTube官方文档强大之处与tag配合,如果怪物AI在需要治疗的时候,会搜索拥有治疗效果的能力并使用效果可以设置瞬间、持续、永久增加Tag避免重复造成伤害1 - 基础配置开启插件添加依赖PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameplayAbilities", "GameplayTags", "Ga.原创 2021-04-27 19:28:47 · 1525 阅读 · 0 评论 -
Tree Game Gym - 101234I(树 游戏 想法)
https://vjudge.net/problem/Gym-101234I题意:给一棵树,每次选择两个叶子,路径上的边被染色。所有选择得出的路径的边不能重复。当无法找到时游戏结束。求最少次数。解析:以叶子结点为例。大于2的一定直接匹配。最后剩下两种:第一种若不和其它匹配,则会自己匹配,答案+1。第二种则不会,只剩下1一个时答案+0。→\to→我们会尽可能保留第二种。→\to→第一种有两个就直接匹配→\to→对于每个子树来说,有以下情况需要考虑:左边是第一种的数量,右边是第原创 2021-04-11 16:31:55 · 281 阅读 · 0 评论 -
Galactic Collegiate Programming Contest(__gnu_pbds tree 可求排名的Set)
添加链接描述/* * Author : Jk_Chen * Date : 2021-03-27-13.51.34 */#include <bits/stdc++.h>using namespace std;typedef long long LL;#define rep(i, a, b) for (int i = (int)(a); i <= (int)(b); i++)const int maxn = 1e5 + 9;LL rd(){ LL ans原创 2021-04-11 16:15:28 · 284 阅读 · 0 评论 -
A - Renzo and the lost artifact Gym - 101064A(模拟退火 求两个正方形的重合点)
题意:给两个相关区域,但是不同比例的地图,第一个是左下角(0,0),右上角(W,H)。第二个是比例比较小的地图,分别给出左下、右下、右上、左上四个点。第二张地图可能旋转甚至翻转。在平面上有一个点,在两张地图上的位置相同。求这个点。解析:如何不能旋转直接就可以求出来旋转的话就模拟退火,退火的点P在大地图上移动,然后求出在小地图上的映射点P2。答案一定是Dis(P,P2)=0Dis(P,P2)=0Dis(P,P2)=0。所以退火点移动的标准就是新点的Dis(P,P2)Dis(P,P2)Dis(原创 2021-04-10 16:09:36 · 233 阅读 · 0 评论 -
UE4 基于DS的网络同步
只在客户端本地执行if (GetLocalRole() < ROLE_Authority || GetNetMode() == ENetMode::NM_Standalone) {}原创 2021-03-31 20:35:47 · 7742 阅读 · 0 评论 -
UE4 GAS/ActionRPG学习导图——AttributeSet(Gameplay Ability System)
文章目录重要类FGameplayAttributeData - 用于存储某个属性的值UAttributeSet - 属性数据集合FGameplayAttribute - 作为一个名字的标识使用UAttributeSet以及本身官方ARPG代码示例重要类属性涉及到几个类UAttributeSet、FGameplayAttribute、FGameplayAttributeData。FGameplayAttributeData - 用于存储某个属性的值两个基础属性为:BaseValue、CurrentVa原创 2021-03-29 20:47:05 · 2922 阅读 · 0 评论