UE4
sukhoi27smk
学习是为了探索这个世界的本质
展开
-
menu源码分析
1. 菜单根据功能不同被划分了不同的section,不同的section的源码被分布在不同的地方 例如,主菜单的源码在Editor/Mainframe,datavaildation菜单的源码在Plugins\Editor\DataValidation下2. 以主菜单为例,菜单以如下方法构建 首先创建出此菜单的section,然后在section中加入具体的菜单项3. 通过查看主菜单的构建,可以看到是用的 FMenuBuilder 这个类进行构建,分析FMenuBuild...原创 2021-05-07 09:04:30 · 142 阅读 · 0 评论 -
PlacementBrowser源码分析
PlacementBrowser的源码在 Editor/PlacementMode下面一、Placement分类的创建1. Placement分类被存贮在FPlacementModeModule 的成员变量Categories里面。 2. 在 FPlacementModeModule::StartupModule() 创建出所有的Placement分类 3. 每个大类由RegisterPlacementCategory函数进行注册,每个大类后再创建出小类 ...原创 2021-04-27 18:58:10 · 154 阅读 · 0 评论 -
VS2017编译UE4.19.2报错
error C4577: 在未指定异常处理模式的情况下使用了 "noexcept";不一定会在异常时终止。指定 /EHsc修改 VCToolChain.cs, 在AppendCLArguments_Global 函数中增加Arguments.Add("/EHsc");原创 2021-03-08 00:18:03 · 471 阅读 · 0 评论 -
UE4 查看打包文件内容
UnrealPak.exe pak文件 -list -cryptokeys=工程下Crypto.json文件 >输出文件原创 2021-01-19 08:21:38 · 643 阅读 · 0 评论 -
获取场景中指定类的实例
for (TActorIterator<类名> It(GetWorld()); It; ++It){ UE_LOG(LogTemp, Warning, TEXT("%s"), *It->GetName());}原创 2020-11-24 11:14:25 · 180 阅读 · 0 评论 -
UE中文乱码问题
原创 2020-10-09 16:04:11 · 1040 阅读 · 0 评论 -
UE4打包后如何调试
在项目打包后发现有一个数组越界问题,然而无论是 Play in Editor或是 VS选为DebugGame后启动,游戏都没有任何问题,越界问题只在打包后出现。这里记录一下自己的Debug方法。首先将项目以DebugGame配置打包:更改打包配置,也可以在Project Settings中更改如果不是这个配置打包,打包后程序可能发生优化,对debug造成麻烦。运行打包成功后生成的程序,然后Ctrl+Shift+Esc打开任务管理器,找到程序右键选择调试OK之后会打开一个.转载 2020-09-30 15:10:59 · 2025 阅读 · 0 评论 -
UE4 插件大坑
正常如果在工程中创建C++类,UE4都会自动给类前面添加一个“工程名_API”的宏,但是插件中的C++类不会添加。这样如果在主工程C++中调用插件中的C++类就会报链接错误,因此需要自己手动添加“插件名_API”这个宏。...原创 2020-07-10 18:22:02 · 533 阅读 · 0 评论 -
Project vector on to vector
原创 2020-04-01 10:21:45 · 551 阅读 · 0 评论 -
error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”
一般为Windows中的宏和UE4冲突所致,需要用如下头文件包裹冲突的头文件:#include "Windows/AllowWindowsPlatformTypes.h"#include "Windows/PreWindowsApi.h"#include "冲突的头文件"#include "Windows/PostWindowsApi.h"#include "Windows/Hi...转载 2020-03-26 10:39:36 · 3136 阅读 · 0 评论 -
指定一个actor对pawn不可见
1. 把一个staticmesh作成一个actor2. 给actor添加一个tag3. 在pawn的beginPlay里面查找这个actor,并设置actor的owner为pawn,然后调用set owner no see原创 2020-03-26 10:33:26 · 541 阅读 · 0 评论 -
世界地图并不是世界的真实样貌!甚至误差非常大
现在所用的世界地图并不是世界的真实样貌,甚至误差大的离谱。地球属于三维球体,想完整地表现到二维平面上是不可能的,必须牺牲一些真实属性。因为三维降到二维肯定存在扭曲失真,这是维度差异所决定的,不可避免。我们现在所用的世界地图选择牺牲面积大小,保留角度和形状,这种独特的方式绘制世界地图也被称为“墨卡托投影法”。或许学过地理的读者会比较熟悉,墨卡托投影法就是假想在地球内部中心位置放上...转载 2019-11-22 10:05:08 · 760 阅读 · 0 评论 -
UE4中的字符串转换
虚幻4学习---UE4中的字符串转换(文章来自于UE4官方文档)String Conversions: FString To FNameFString To Int32Float To FStringFArrayReaderPtr To FStringTArray To FStringFString To char *转载 2017-09-13 15:21:05 · 1454 阅读 · 0 评论 -
UE4 连接自定义服务器
UE4 dedicated server是一个很好的游戏服务器,但是对于大厅和聊天服务器来说,我们要自行开发,通过UE4的socket组建很方便的和其他服务器建立连接创建SocketFSocket* Socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("defaul转载 2017-09-14 18:44:03 · 612 阅读 · 0 评论 -
UE4--多线程的实现方式
首先查阅了WIKI中能找到Rama大神的两篇文章,讲了两个开线程的方式:https://wiki.unrealengine.com/Multi-Threading:_Task_Graph_Systemhttps://wiki.unrealengine.com/Multi-Threading:_How_to_Create_Threads_in_UE4TaskGraph与FRunnab转载 2017-09-19 11:21:36 · 3709 阅读 · 0 评论 -
UE4 HTC VIVE - 番外篇 - 局域网联机(一)
--------------------引擎环境配置文件修改与项目在线模式启动修改--------------------1)我们就直接用默认名创建一个第三人称项目Paste_Image.png2)右键资源栏,创建一个新的C++类创建一个C++类选择不继承任何UE提供的基类3)打开【解决方案资源管理器】,找到我们的项目【MyProject】,点开后找到【Config】文件夹,找转载 2017-11-09 11:09:15 · 2702 阅读 · 0 评论 -
UE4 HTC VIVE - 番外篇 - 局域网联机(二)
开始之前先说一下网游中服务器与客户端的大致关系:网络游戏中各段关系图客户端职责:1)接收玩家的输入翻译得到【玩家指令】上传服务器;2)接收服务器下发的【游戏指令】并将其实现服务器职责:1)接收客户端的指令并处理;2)广播当前帧所需的游戏数据与游戏状态;强联网中的高带宽与游戏中的卡顿解释:服务器压力:我们打团战的时候会出现输入没有响应,正式因为让你的输入产生结果的模块不在客户端而转载 2017-11-09 11:12:29 · 1339 阅读 · 1 评论 -
UE4 HTC VIVE - 番外篇 - 局域网联机三
环境设置和检测1.打开引擎下的在线调试引擎在线模式开启2.打开项目的在线调试项目在线模式开启3.检查机器网段我们需要对每台要加入局域网的机器都进行网段检测,这是能客户端能找到主机广播的前提,否则无法搜到主机Windows键+R键输入CMD输入ipconfig检查IP前三位,确保每台机器的网段统一这是我的开始处理动作同步实现思路:(1)创建存储游戏玩家动作转载 2017-11-09 11:13:55 · 2145 阅读 · 0 评论 -
UE4 HTC VIVE 多人联机
1. editor的VR模式不支持网络,所以在VR模式下没法调试多人联机程序2. editor的standalone模式,引擎的源码里面把VR模式关闭了,所以需要修改引擎源码原创 2017-11-10 17:17:13 · 1785 阅读 · 0 评论 -
UE4 动态创建Actor并且附加static mesh
原创 2017-11-13 16:11:46 · 10883 阅读 · 0 评论 -
UE4 远程调用函数
1. Multicast 如果在服务器端执行,则先执行此函数,然后自动依次在所有客户端调用此函数。 如果在客户端执行,则只在此客户端执行,服务器和其它客户端都不执行。2. RunOnServer 只能在服务器端执行,客户端无法执行。3. Run On Owning Client 不管是服务器还是客户端,都可以执行此函数,实际就是各执行原创 2017-11-13 15:59:12 · 1097 阅读 · 0 评论 -
UE4 获得player id
获得Player ID获得Player 位置获得所有PlayerId原创 2017-11-16 15:41:21 · 2153 阅读 · 0 评论 -
用鼠标选择模型表面两点并连线
1.两次鼠标点击分别用两个小球标识点击的位置2. 鼠标右键实现两个位置之间的连线,并在线的中心位置设置textrender来显示线的长度3. 设置textrender的朝向始终面向摄像机,并作插值平滑过度4. 设置鼠标光标可显示,并且关卡可以响应鼠标事件5.关闭textrender的深度测试模式,使textrender始终可以显示在最上面并且原创 2017-11-24 18:31:14 · 682 阅读 · 0 评论 -
第一人称视角获得运动方向和视角的夹角
1. GetVelocity获得速度的vector2. 使用RotationFromXVector和速度的vector得到世界坐标系里速度向量和世界坐标系X轴的夹角 虽然,RotationFromXVector返回的是一个rotation,但实际上只有Yaw值有效,因为Yaw(围绕Z轴的偏转角)即为 速度vector和X轴的夹角。3. GetActorRotation或原创 2017-12-22 14:37:37 · 1405 阅读 · 1 评论 -
深入浅出UE4网络
UE4中的官方文档结构比较混乱,且有部分错误,不方便学习。笔者试图通过本文,整理出一篇关于UE4网络的文章,方便朋友们对UE4中的网络同步部分的认识,并有进一步理解。如有讲得不清楚明白的地方,还望批评指正。如需转载请注明出处,https://i.cnblogs.com/EditPosts.aspx?postid=6511821,这是对作者最起码的尊重,谢谢大家。本文的结构如下:一、转载 2017-12-27 08:43:36 · 698 阅读 · 0 评论 -
UE4 多人联机显示每个人的playid
目的:在多人联机模式下,在每个pawn的上方显示textrender,并且在textrender里显示每个pawn的playerid下面以一个listen server和两个client的方式测试。1. 创建一个带有textrender的actor,并且勾选其replicated开关2. 在Charactor的蓝图里面创建出textrender的actor并attach到Cha原创 2017-12-28 15:33:38 · 4389 阅读 · 1 评论 -
UE4 左右立体参数
在编辑器的editor preferences里设置下面参数原创 2018-01-22 12:51:25 · 1858 阅读 · 2 评论 -
TSubclassOf
在蓝图或C++层面调用SpawnActor创建一个actor对象,或者调用SpawnActorDeferred延迟创建一个actor对象时,都需要一个class类型的参数。如果在C++层面,对象类型是我们自己在蓝图里做的蓝图类,那么C++层面需要得到蓝图类型。做法如下:1. 建立一个成员变量并暴露给蓝图 UPROPERTY(EditDefaultsOnly, Categ原创 2018-01-06 16:31:56 · 2206 阅读 · 0 评论 -
蓝图中实现人物移动1
从Character继承一个蓝图类并编写下面代码1.得到前后移动的方向向量2.得到左右移动的方向向量3. 实现前后移动事件4. 实现左右移动事件5. 实现鼠标左键改变视角和移动方向原创 2018-01-08 13:53:00 · 600 阅读 · 0 评论 -
UE4 多个static mesh合并成一个static mesh
第一种方法:1. 把需要合并的所有的static mesh导入到一个level中,static mesh导入到level中后,会自动变成static mesh actor2. 在level的world outliner面板把选中需要合并的所有的static mesh actor3. 鼠标右键,在弹出的快捷菜单中选择“convert actors to static mesh“,指定原创 2018-01-25 17:22:46 · 11119 阅读 · 0 评论 -
解密ControlRotation与ActorRotation
在实现角色移动时,我们是通过获取当前角色向前或者向后移动的向量来计算具体的移动步长,进而增量设置角色位置以达到使角色移动的目的。但是获取向前或者向后的向量得先知道当前角色在世界坐标系中旋转的角度,于是我们就在ControlRotation和ActorRotation之间犹豫不定,对二者异同不甚了解,分别表达的意图也懵懵懂懂,似乎对于初学者总隔着一层面纱,今天我就帮大家揭开它。有个大前提:只讨论第一转载 2018-01-19 14:15:40 · 1380 阅读 · 4 评论 -
新手向:如何理解OpenGL中着色器,渲染管线,光栅化等概念
首先,光栅化(Rasterize/rasteriztion)。 这个词儿Adobe官方翻译成栅格化或者像素化。没错,就是把矢量图形转化成像素点儿的过程。我们屏幕上显示的画面都是由像素组成,而三维物体都是点线面构成的。要让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程。就是从矢量的点线面的描述,变成像素的描述。 如下图,这是一个放大了1200%的屏幕,前面是告诉计算机我有一个圆形...转载 2018-02-26 16:14:52 · 416 阅读 · 0 评论 -
材质加载
UMaterial* Material = LoadObject<UMaterial>(NULL, TEXT("/Game/VertexColorMaterial"), NULL, LOAD_None, NULL);原创 2018-02-27 10:09:26 · 217 阅读 · 0 评论 -
法线贴图Nomal mapping 原理
法线贴图多用在CG动画的渲染以及游戏画面的制作上,将具有高细节的模型通过映射烘焙出法线贴图,贴在低端模型的法线贴图通道上,使之拥有法线贴图的渲染效果,却可以大大降低渲染时需要的面数和计算内容,从而达到优化动画渲染和游戏渲染的效果。 现在好多3d网游都没有法线贴图啊,呵呵,《giant》就没有。CG:计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为...转载 2018-03-15 00:05:43 · 1133 阅读 · 0 评论 -
第三方静态库的使用
1. 工程根目录下创建文件夹“ThirdParty”,然后在此文件夹下创建“includes”和“libs”文件夹2. 拷贝静态库的头文件和库文件到上面的文件夹下3. 修改工程的build.cs文件,增加下面代码 1)在类中 private string ThirdPartyPath { get { return Path.GetFu...原创 2018-03-10 13:15:22 · 444 阅读 · 0 评论 -
动态更新纹理
1. 创建C++类继承自AStaticMeshActor2. 定义用于渲染队列的数据结构struct FUpdateTextureData{ FTexture2DResource* Texture2DResource; FUpdateTextureRegion2D* UpdateTextureRegion; uint8* DynamicColors; int32 w;};...原创 2019-04-12 15:46:23 · 1336 阅读 · 1 评论 -
设置材质阿尔法通道和双面渲染
原创 2018-03-10 14:52:10 · 614 阅读 · 0 评论 -
ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER
该宏非常重要, 其作用是: 创建一个渲染命令任务,并将该任务压入渲染队列,待渲染线程执行. 主要用于多线程渲染! #define ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER(TypeName,ParamType1,ParamName1,ParamValue1,Code) class EURCMacro_TypeName : public FRen...原创 2018-03-10 23:35:01 · 1110 阅读 · 1 评论 -
在UE中自由绘制基本图元的几种方法
1. 在UMG中可以使用UWidgetBlueprintLibrary类来绘制, UWidgetBlueprintLibrary类提供了一系列的静态函数可以使用。 但只提供了DrawLine,DrawLines,DrawBox,DrawText,DrawTextFormatted函数, 如果要自己绘制的圆形,需要在DrawLine的基础上自己来写。 实际上UWidgetBl...原创 2018-02-01 11:44:10 · 4945 阅读 · 1 评论 -
添加纹理到材质
1. 导入一个图片资源作为纹理贴图2. 新建一个材质3. 打开材质编辑器,将“TextureSample”和“TextureCoordinate”两个材质表达式放到蓝图中4. 设置“TextureSample”的纹理属性为第1步导入的纹理贴图5. 将“TextureCoordinate”的输出与“TextureSample”的UVs输入连接6. 将“TextureSample”的颜色输出与材质的b...原创 2018-03-13 01:02:45 · 868 阅读 · 0 评论