文章列表
UE4线条渲染机制分析[AI]
## 问题背景 在UE4引擎中,当近距离观察线条时,会看到线条实际上是由两个垂直交叉的面片构成。这种设计选择背后有着深刻的渲染技术考量。 ## 核心实现机制 ### 1. 几何体生成原理 UE4的线条渲染系统采用了一种巧妙的几何体扩展技术: - **一维到三维转换**:将原始的起点-终点线段扩展为具有视觉厚度的3D几何体 - **双面片结构**:通过生成两个垂直交叉的四边形面片来保证线条的可见性 ### 2. 具体实现细节 #### 厚度计算(BatchedE...
运行时生成NavModifierVolume
## 概述 引擎默认的`ANavModifierVolume` 如果在游戏运行时生成是不起作用的,它只有在编辑器中放置的时候起作用。为了解决这个问题,我们实现了`ARuntimeNavModifierVolume` `ARuntimeNavModifierVolume` 是一个专门为运行时动态导航修改体积类。该类继承自 `ANavModifierVolume` 并实现了 `IUnLuaInterface` 接口,支持在蓝图预览模式和运行时模式下动态创建和管理导航网格修改区域。 ## 类继承...
UE4 延迟生成的工作原理
UE4 的延迟生成(Deferred Spawning)机制。 ## UE4 延迟生成的工作原理 ### 核心概念 延迟生成是 UE4 提供的一种 Actor 生成模式,允许在 Actor 完全初始化之前对其进行配置。这个过程分为两个阶段: 1. **延迟生成阶段**:创建 Actor 实例但不完全初始化 2. **完成生成阶段**:完成初始化并将 Actor 正式加入世界 ### 工作流程 从你选中的代码可以看到典型的使用模式: ```cpp /...
UGameplayDebuggerLocalController为什么没有跟着玩家一起移动
## 问题根源分析 ### 核心原因:`UGameplayDebuggerLocalController` 不是 Actor,它是一个 UObject 通过代码分析,我发现了关键问题: 1. **`UGameplayDebuggerLocalController` 是 `UObject`,不是 `AActor`** ```cpp UCLASS(NotBlueprintable, NotBlueprintType, noteditinlinenew, hidedr...
# UE4如何定制AI的移动寻路方式
# 如何定制AI的移动寻路方式 ## 初始化寻路过滤器 ```C++ const FSharedConstNavQueryFilter& ATestMonsterAIController::GetOrCreateNavmeshQueryFilter() { UNavigationSystemV1* NavSys = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld()); if (NavSy...
UE4自定义NavLink实现指南
# UE4 自定义 NavLink 实现指南 ## 概述 本文档详细介绍了如何在 UE4 中实现自定义的 NavLink 系统,包括自定义 NavLink 组件、路径跟随组件和 NavLinkProxy 的完整实现方案。该系统主要用于 Test 功能,支持 AI 在导航过程中与游戏对象(如门)进行交互。 ## 系统架构 自定义 NavLink 系统由三个核心组件构成: 1. **UNavLinkTestCustomComponent** - 自定义 NavLink 组件...
[c++]float浮点数精度问题
遇到一个问题,AI无论如何都走不到距离自己0.0315cm处的一个点。最后跟踪下来是浮点数精度的问题。因为此时AI的坐标是(123548.758,-214606.125,3982.34863),进行垂直射线往下打的时候,获取的位置是(123548.758,-214606.094, 3982.34863),按理说垂直射线不会产生水平面偏移,最后发现是精度问题。 因为IEEE 754单精度标准,符号位一位,指数位8位,尾数位23位。尾数位表示的最大精度为2^-23^次方,既 1.19X10^(-7)^...
[UE4]追查了两天内存疯狂泄露的原因,竟然是Log没关???——UE4如何查内存泄露
各种怀疑,各种debug,最后发现是log窗口没关,因为cache机制所以内存越来越多。然后内存耗尽。。。 好吧,我比较菜。 一天后。。。[更新] 内存耗尽和log窗口的log关系不大(为了减少LOG的影响,可以在项目里面把UE_LOG定义为空,这样就不会被log影响日志了。),主要是ue4下使用std标准库,因为不同的内存管理机制,会造成内存被cache住无法释放。 在UE4引擎端,会hook所有的内存分配。 `Engine\Source\Runtime\Core\Public\HA...
UE4中的SubSystem的使用
## 引言 Subsystems 是一套可以定义、自动实例化和释放的类的框架。可以将其理解为 GamePlay 级别的 Component. UE在4.22版本的时候开始引入Subsystems,并在4.24完善.SubSystem其实可以算是GamePlay框架基础上的一个增强功能,属于GamePlay架构的范围. Subsystem的好处是利用它的特性可以很好的安排好对象的生命周期,也会使程序的架构更加的清晰. ## SubSystem分类及其生命周期 ...
Navmesh bounds are too large 报错修复方法
当地图相当大,在生成导航时会有以下提示:  ```LogNavigation: Error: Navmesh bounds are too large! Limiting requested tiles count (5472000) to: (1048576) for RecastNavMesh /Game/Level/Map.Map:Persistent...
ubuntu安装mysql
**ubuntu中使用apt-get进行软件包管理:** > 安装:apt-get install name > 更新:apt-get update name > 卸载:apt-get remove name > 查找:apt-cache search name 通过apt 安装MySQL会安装最新版 ##第一步:更新源 命令: sudo apt-get update ##第二步:安装mysql服务 命令: sudo apt-get install mysql-...
汇编学习好工具推荐Compiler Explorer
有时候为了学习汇编,不知道如何下手,从何处下手?特推荐一种高级语言到汇编的学习方式。 首先先用高级语言写一个简单的代码逻辑,然后在看汇编生成的结果。这样就可以不但能够熟悉汇编,也能够对高级语言的本质有更深入的了解。 基于此,推荐一个在线的学习工具 Compiler Explorer。https://godbolt.org/ 优点: 1.实时编译 2.鼠标高亮提醒。鼠标处于高级语言处时,自动高亮该出的汇编生成。 3.可以指定编译项,了解编译参数变化影响的生成的汇编变化。 ...
vscode如何调试bash脚本
以前写linux bash脚本,常常都是瞎蒙的状态。开发流程都是:先去google搜,然后去抄一段代码,然后肉眼review,然后运行观察效果。根据运行结果来看脚本是否正确。如果再高级一点就是辅助详细的echo 进行log输出。 于是不禁反问?可有调试bash脚本的工具和方法,这样用调试的方式去运行脚本,逐步的看每一个语句的运行结果,岂不是很爽? 结果还真找到了。在vscode中搜索插件bash debug。即可。 PS: win10下面需要安装wsl,然后在vscode里面安装一个wsl...
ACM部分语言快速IO
部分语言的快速 IO 部分题目输入数据量过大,需要使用更高效读入方式才能通过。以下按照热身赛 B 题的需要列出部分语言的快速 IO。 其他语言的 IO 可以参考题目页提交框右上角的“帮助-各种语言程序样例”。 C++ C++ 中的流输入输出默认会与 C 风格的标准输入输出同步,导致性能不佳。同时 cin 和 cout 也存在同步, cin 读取数据前会先清空 co...
博客支持webgl 3D地球了
现在我们网站的主页支持在背景显示一个动态的地球了。而且上面还有实时的天气云图哦。 然后支持这个功能其实不需要做特别多的东西,主要是借鉴一个开源项目WebGlEarth2。开源地址:https://github.com/webglearth/webglearth2 这个是他们的API使用手册,和一些demo。https://sites.google.com/site/webglearth/ 不过官网开始推荐一个更新功能更强大的开源项目cesium了。htt...
php5.4.22 the page isn't working ERR_EMPTY_RESPONSE
今天做了一个Tag标签功能,本地开发环境运行正常,发布到线上的会后,出现了这种错误! 一脸懵逼,然后去看系统运行日志,发现没有错误.然后去看apache日志,发现也没有错误,最后在php的日志里发现了问题. Can't use function return value in write context ._不能把一个函数的返回值放到一个可写的上下文里面. 于是就打开了TagController.php定位到173行,...
prism 实现代码高亮测试
//使用prism实现代码高亮 const Prism = require('prismjs'); const loadLanguages = require('prismjs/components/'); loadLanguages(['haml']); // The code snippet you want to highlight, as a string const code = `= ['hi', 'there', 'reader!'].join...
如何修复:git bash WARNING: terminal is not fully functional
For Git Bash, this can be fixed by adding the following line to ~/.bashrc: export TERM=cygwin -or- export TERM=msys The first seems to be the original by git for wind...
windows下VC++编辑器推荐
针对并适合对象:C语言初学者或者不了解公司级开发软件的人。 推荐工具:VS2015/vs2013/vs2017/vs2010 推荐理由:功能全,支持语言多,还有代码补全提示。 缺点:包比较大。 补充:如果是学生只想学习C语言,可以使用Community版本VS系列工具。这个系列是免费的,而且比较小,更适合初学者使用。 不推荐工具:VC++ 6.0。理由是严重的版本不兼容,开发理念比较落后,已经不在是目前公司开发工具。 额...