TOC 最近在游戏中负责了导航需求,借此机会研究了一下UE4的导航网格生成和寻路算法。这一篇是第一篇,将会讲述场景体素化的过程。...不过UE4对其算法做了不小的修改。...Recast采用了体素化的方式,来生成导航网格。大致分为三个步骤: 将场景体素化。形成一个多层的体素模型。 将不同层的体素模型划分为可重叠的2D区域。...这里对着源码简述一下其算法(UE4基本上重写了rasterizeTri()函数。我理解主要为了优化性能。...是如何将场景体素化的。
让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体。 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N)。...添加碰撞体 点击播放,你会注意到我们的摄像头可以通过WASD或箭头键和鼠标来移动,但是可以穿透岩石体,这明显不合常量,所以现在我们先来把岩石添加上碰撞体的属性。...碰撞体是用于模拟物理的物体碰撞属性,我们可以通过网格-网格来检测碰撞,不过需要花费很高的开销。所以我们使用近似的包围盒来估算碰撞体。 1) 点击场景中的岩石。...4) 选择上方的碰撞菜单,然后选择“添加胶囊简化碰撞”来模拟出近似的岩石形状的碰撞体: 5) 你可以通过W(平移)、E(旋转)、R(缩放)来调整碰撞体的网格大小: 6) 点击左上角的保存。...然后点击播放,你会发现摄像机已经穿不过该岩石了,因为此时岩石具有一个碰撞包围体了。 这时候我们就完成了对岩石添加碰撞体的操作了。 最后的效果:
USTRUCT()——用于告诉虚幻为结构体生成反射数据。 GENERATED_BODY()——UE4将这个标记替换为将为该类型生成的所有必要的样板代码。...客户端(Client) 如果您使用UE4联网功能处理多人项目,该目标将指定项目用作面向多玩家游戏的UE4客户端-服务器模型中的客户端。...服务器(Server) 如果您使用UE4联网功能处理多人项目,该目标将指定项目用作面向多玩家游戏的UE4客户端-服务器模型中的服务器。
** 1> 一个插件至少有一个模块 2>一般插件都是做底层做通用设计的,而模块做的负责的我理解为逻辑
UE4插件研发 UE4插件扫盲 UE4插件是什么 UE4插件的作用 UE4引擎、项目、插件的区别 引擎自带的插件浏览器 插件目录结构 插件配置文件说明 UE4插件的创建方法 插件代码的执行过程 四种常用模式的插件模板...第三方库的引入 牛刀小试 创建Actor到视图插件 插件打包 插件发布 常见的问题 插件项目案例 UE4插件扫盲 UE4插件是什么 UE4引擎和UE4项目是由各个模块组成的,其主要编程语言是C++。...UE4引擎、项目、插件的区别 UE4引擎由Epic官方维护与发布,源码托管在GitHub平台上,可以上官网下载EpicGamesLauncher管理下载各个UE4 Release版本。...UE4插件可以增加UE4的扩展性,丰满Game项目,也可让开发应用程序变得简单且多样化,但其不能独立运行。...插件编译版本 用户使用插件时的UE4版本需要与插件编译时的UE4版本一致,不然会警告提示版本不一致而丢失插件。 所以发布插件时要注明插件所支持的UE4版本号。
VisualStudioDebugging/UE4.natvis 拷贝到 vs的Common7/Packages/Debugger/Visualizers目录下,调试时值鼠标移动到变量上,值可见 UE4...request”: “attach”, “processId”: “${command:pickProcess}” }, c++代码自动补全,改成tag parser(版本较老容易出现错误提示,ue4...或者下载clang(ue4不是标准的C++语法clang和cpp_tool个人感觉都一样) Clang ?
最近把HairWorks整合到了UE4 4.20, 整合的过程中发现了一些没法直接merge的代码, 主要集中在LightRendering.cpp和DeferredLightingPixelShader.usf...UE4使用了一些宏来辅助定义UniformBuffer中的结构体, 在Shader中是可以打到对应的定义的....见IES Light Profiles, 参考现实中照明设备的标准的一个亮度曲线算法, 跟强度用流明一个套路 Lighting Channel Forward Rendering时代美术惯用的技俩, UE4
UE4在C++中和标准的枚举是一样的,支持两种写法,enum和enum class /** Parameter enum for CastChecked() function, defines when...可以通过继承的方式指定内存占用长度,不指定时默认是int,使用规则和C#或java/C#的枚举很像,有严格的类型检查,做位运算需要先转换为底层类型(可通过std::underlying_type转换)再进行位运算 UE4
本文带大家认识UE4插件/模块的使用方式Dll。既然为DLL,那么我们就可以对其封装,做到不公开cpp的目的。...1>新建一个Plugin 2>在plugin中创建一个Actor类,并在里面写一个UE4的Log输出函数。...3>对其进行编译,编译出不同模式的dll出来 4>在UE4场景中测试我们Log函数 5>删除cpp文件 6>在我们的.build.cs中添加不参数编译的参数 bUsePrecompiled = true...; 7>再到UE4场景中测试我们Log函数。...场景中测试我们Log函数 5>删除cpp文件 6>在我们的.build.cs中添加不参数编译的参数 bUsePrecompiled = true; 7>再到UE4场景中测试我们Log函数。
JS向UE4发送事件 该app.js文件提供了两个JavaScript函数,您可以在HTML播放器页面中调用它们,以允许用户将事件和命令从浏览器发送到Unreal Engine应用程序: emitCommand...PlayerCharacter: { Name: "Shinbi" Skin: "Dynasty" } } emitUIInteraction(descriptor); UE4...emitUIInteraction 包含字符串“ MyCustomCommand”,并调用自定义函数来处理事件: Get Json String Value节点中,Filed Name参数可以获取对象中的对象值; UE4
所以就尝试使用MRT输出一个R16F的Depth, 需要依赖FramebufferFetchMRT的实现. 4.26中UE4已经增加了延迟渲染, FramebufferFetchMRT已经实现了vk和
UE4导入高度图 查找高度图 使用ps编辑图片 打开虚幻引擎的地形编辑器 查找高度图 可以从百度直接搜索 使用ps编辑图片 下载下来之后图片是jpg格式的,虚幻引擎不能直接用 需要使用ps编辑一下
UE4投影矩阵 正交投影 class FOrthoMatrix : public FMatrix { public: /** * Constructor * * @param Width view...0.001f, ViewInfo.FOV) * (float)PI / 360.0f, ViewInfo.AspectRatio, 1.0f, GNearClippingPlane ); } } 参考链接 UE4
UE4里也有一个这样的容器,但是内部实现却跟安卓的版本完全不同,我个人觉得UE4版本的实现,才是名副其实的SparseArray,而谷歌的版本从功能上来说叫SparseMap可能更合适。...其实并不是这样的,只要你在写UE4程序,那么这个容器你就基本上一直在用,因为他是TMap和TSet内元素的容器,你使用TSet和TMap时数据实际就存在内部的TSparseArray中,UE4的TMap...下面具体来说说UE4版本的TSparseArray是怎样实现的,可以重点关注内部是怎样管理已经删除的元素的,这点实现的非常巧妙。...FElementOrFreeListLink可以看到内部实际是TElementOrFreeListLink类型,这是一个union,可以看到注释,在分配的时候,这个元素就是元素本身,而没有分配的时候,这个元素就变成了一个结构体,...结构体是前一个和后一个空索引,这不就是一个链表结构吗?
UE4中有一个特殊的容器TripleBuffer,三缓冲,顾名思义,这个容器内确实是有三个Buffer。...UE4的TTripleBuffer 前面说了这么多,只是为了讲解三缓冲本身的原理,UE4提供了TTripleBuffer容器,就是按照这样的原理,可以让两个线程之间可以高性能同步数据。...下面是TripleBuffer的成员变量 这个Flags,在初始化的时候,会设为Initial,下面这个枚举可以看到每一位具体定义,这里其实是用了7位表示,其中0-1位表示ReadBuffer的Index...那既然TripleBuffer这么好用,为什么UE4内部用的这么少呢?可以全局搜索,除了一个Test代码,基本没有地方在用。...但TQueue就完全不会有这样的问题,所以这就解释清楚了为什么UE4内部在要求高性能的场景,即使有大量内存碎片也要使用TQueue(其实每次都new问题不严重,因为UE4有实现自己的内存池,重载了new
UE4 ReplicationGraph分析 老版本网络系统 总体思路 所有Actor都会添加到网络列表中,每次更新的时候都是从这个Actor列表中遍历,根据不同的条件,确定每个链接的客户端需要同步的Actor
跟Class一样, 类成员变量也可以像C#那样加一堆的描述 UPROPERTY([specifier, specifier, ...], [meta(key=v...
Actors 客户端复制actor被spawn出来时, 只有Location和Rotation在PreBeginPlay()和PostBeginPlay()时是...
UFUNCTION UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数。...BlueprintCallable, Category = "Snowing,BlueprintFunc") void BlueprintCallableFunction(); 宏将支持函数说明符更改UE4
最近发现没有中文资料提到怎么隐藏和显示指定的虚拟摇杆,即Touch Interface,所以这里记录一下。
领取专属 10元无门槛券
手把手带您无忧上云