自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 收藏
  • 关注

原创 跟着官方文档学习 二元谓词 中的 匿名函数

在TestLambda测试得到的效果是一样的。有点回调的意思,而且你的断点,直接打不到匿名函数里。测试,但在MyTeam2里通过二元谓词,用Money排序。我们在TestLambad里定义一个匿名函数。在结构体最后,重载 < 运算符,用Id排序。就是随便在某个地方定义后就能直接使用。一.UE匿名函数 的初步认识。二.通过二元谓词,排序结构体。我们就能看到,截然不同的排序。再在这里定义一个正常函数。

2025-03-05 07:44:54 161

原创 跟着官方文档学习 容器TArray 排序 和 二元谓词

这个排序Sort 和 堆排序,不区分大小写。每次排序都差不多一个结果。大小写,他们是一样的。

2025-02-26 23:52:03 14

原创 跟着官方文档学习UE C++ TArray容器系列 迭代 和 排序

WebSocket通信过程去创建WebSocket,要下一帧执行。类似Error,容器不要在遍历的时候去删。迭代器的方法,有点不常见。有点像个指针,迭代完还自带break.一.首先测试下,官方案例。二. 可能导致的错误用法。

2025-02-26 21:52:15 178

原创 官方文档学习TArray系列 容器的符号

1.重载一下 元素中的 == 运算符,有时需要重载排序。接下来,我们将id 作为判断结构体的标识。测试,发现相同Struct,相同的ID不会被同时加入,AddUnique使用了重载运算符。一.TArray中的元素相等。

2025-02-24 23:59:17 138

原创 官方文档学习TArray数组的运算符

MoveTemp的实现原理,应该先进行了深拷贝。再将原动态数组清空。元素自身要有 ==。数组要顺序数量同时相同,才能叫数组间的相同。就是我们常说的深拷贝,完全复制一个对象到另一个数组。最后敲一遍实例代码,会有更深的理解。1.重载== 运算符。

2025-02-24 23:56:56 264

原创 UE 跟着官方文档学习 容器TArray 系列三 添加数组,设置容器容量

【代码】UE TArray 系列三。

2025-02-21 21:36:38 145

原创 跟着官方文档学习 TArray系列(二)添加元素

TArray的Add,可用于简单常见的数据结构 int32,float这样。即使有临时值代价也不大。但如果是USTURCT,FString这样的就可以用Emplace这样,直接加入数组。TArray的增加,不是来一个加一个。而是类似std::Vector那样的怎加方法,大概就是超过就怎加一倍这样,他肯定有对于的算法。Num = 4,之前都是4.

2025-02-20 23:33:43 210

原创 跟着官方文档学习 UE5.3 C++ TArray系列(一)

它们就相当于C++动态数组Vector,但是被UE封装了,懂得都懂反射嘛,要不一不小心就被回收了。它真的非常常见,我所用的容器中,它绝对排名第一,第二是TMap。

2025-02-19 22:40:10 271

原创 UE5.3 C++ USTRUCT 的再次理解

之前写过USTRUCT创建,当时只是作为通信的接口,从零开始创建,能在C++里使用。我们来看看官方文档里面是如何描述创建的,更简洁但很明白。一.USTRUCT创建。

2025-02-18 23:35:18 284

原创 UE5.3 C++ 通过Spline样条实现三维连线,自己UV贴图。

第一个点,是本身直接放过去。第二个点是使用AddSplinePoint放进去。让后算两个点的距离,通过材质参数集合,设置UV。材质参数集合,它的改动,在上面的代码里。它在材质里的如下图,只设置了V的平铺,没设置U的平铺。一.制作了基于USplineComponent的画线插件,就是我们常说的样条线。直接看怎么用,关于插件实现细节,后续会更新,看思路就行。通过ID,管理每一条线。二.材质参数集合在C++使用。材质参数需要的头文件。

2025-02-16 21:18:43 402

原创 UE C++ UObject 功能的初步总结(结合官方文档)

2.序列化:编辑器的资产序列化到磁盘上,变为.uasset等格式的资产文件。所有的东西存在编辑器里,都是UObject,它们通过Serialize()进行里的序列化操作。4.自动属性初始化:所有UPROPERTY下的属性值,如果自己不初始化,则会自动初始化,就是int ,float 会初始化0,字符串会初始化为空串。3.默认属性值自动更新:属性值你改过,就以你改过为准。你在代码里改过默认属性值,则所有没改过的属性值都会跟着改。USTRUCT 大部分都有,它有着和UObject一样的反射和序列化能力。

2025-02-15 23:31:08 303

原创 UE5.3 C++ USTRUCT的规范使用和制作简单的画线插件

如果想让蓝图认识,需要加BlueprintType。如果想让变量能在蓝图中访问,可用Break/Make,需要使用UPROPERTY修饰符(BlueprintReadWrite)。先介绍,这种简单一点的通过,UE自带的LinePatchComponent进行画线。把模块和头加上就能从GameInstance里获得GameSubsystem,再转换为自己的system。用UGameInstanceSubsystem做插件的好处,有很多。这个是画线的,把头和组件加上就行了。1.首先需要创建一个,None。

2025-02-13 22:31:34 299

原创 UE 5.3 C++ 对垃圾回收的初步认识

所有的C++ UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。只是上一个更通用,下面这个在构造函数里才使用,来创建和管理组件。AddtoRoot,强制不被回收。一旦按下3,垃圾回收。自己的UObject就会被回收掉。在你Actor的头文件的中,声明一个UObject·。解决方案,加上UPOPERTY,让它被对象引用。虚幻会管理,它重载了new 和 delete。UObject 不支持构造参数。并在Actor里声明它。

2025-02-01 21:46:26 376

原创 UE5.3 C++ CDO的初步理解

一.UObjectUObject是所有对象的基类,往上还有UObjectBaseUtility。注释:所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。这为创建和使用UObject的对象提供了 函数,并且提供了应在子类中重写的虚函数。为 UObject 提供工具类的函数,不应直接使用此类。为更底层接口提供给UObject,也不能直接使用反射系统直接,一般是收集UObject的信息。是在运行的时候,拿到运行的对象注册的信息。将这个信息写入对象的表,随时可以取到,访问。

2025-01-29 19:02:48 1145

原创 年度总结(尽量简短)

1.对于U++使用更熟练,能应付基本的开发。几个项目的练习和磨练,基本达到了我今年的目标,自己可以应付项目。2.对于建立自己的工具库,建立自己的服务器。保存自己的财富做的还不够好,确切的说是还没引起重视。希望今年,自己可以多喝水,多运动。1.对于自己想练习的东西,需要更有执行力。多练多做,看明显比做的多。只有从做中,才能明白更多的东西.2.坚持写帖子,虽然后半年的帖子发的没有上半年勤快。3.对于职场上的焦虑,减轻一些。见多了,慢慢就没把和多东西看得很重了。4.对于算法,其实一直都是自己的弱项。

2025-01-29 11:43:04 219

原创 UE C++ 对打包后的窗口的操作

SetScreenResolution设置窗口的分辨率FIntPoint()。这个代码,可以放到GameInstanceSubsystem的Initialize里,打包后后以最快的方式去设置窗口。3.直接使用C++的原始方式,设置UE的窗口。这个的好处是,可以在开始运行很快,就拿到窗口。而不是运行到一定时间,加载到虚幻准备把窗口给你后,才操作。这个通过Viewport拿到Window()的,再移动到哪个点。2.通过虚幻给的窗口句柄,用Windows的函数操控窗口,来设置窗口层级和移动窗口位置大小。

2025-01-17 22:32:03 381

原创 UE 5.3 C++ 管理POI 如何对WidgetComponent 屏幕模式进行点击

Canvas Panel的所有子集都是平行关系,因此有些时候会出现上方图层渲染层级高于下方的图层,这个时候可以调Zorder强行调整渲染层级。同一Actor下挂载或的widget component 可通过Layers shared layer name和Layer ZOrder来设置层级,数值越大越上,layername相同的order需一样;在上图顺序中,bg_1的显示层级低于bg_2 因为panel_1的Zorder低于panel_2不能按照-10+20=10&即使上面有其他,但也能点击到。

2025-01-09 00:11:48 268

原创 UE5.3 C++ Ceiusm中的POI 制作3DUI 结合坐标转化

这里当时卡住了,我继承了C++类来进一步写POI的写如UI的TEXT。这样就可以实现Actor拿到它想显示的UI,并赋值修改这个UI。两个函数,无论时显示UI现在的地方,还是UI输入去其它地方都能实现,坐标的转换。简单做个UI,这个UI把锚点放到屏幕中心。就能实现3DUI刚好在那个点上。然后在CPP里,实现组件。并设置为3DUI,这里用的屏幕尺寸的。而且涉及经纬度,ToText需要设置小数点后的位数 7。创建C++ Actor来制作,APOI。自动在对应经纬产出物体,显示经纬高。简单的通过UI,传值调用。

2024-12-25 20:30:49 494

原创 UE5 C++ Subsystem 和 多线程

有点像“全局变量”,也有点像是静态蓝图函数(如GetGameInstance),可以方便的在蓝图的各个地方调用。Subsystems真正的威力其实远不止这点手头上的便利,而在于接下来要谈的引擎帮你自动处理的部分。我觉得可以暂时理解为线程的生命周期,是由代码确定的,而不是直接和UE的其它类保持相同。创建一个空的类,在类里面继承FRunnable。经典的单例写法,一个static指针,一个staic获得自己的函数。一.Subsystem先做一个简单的介绍,其实可以去看大钊的文章有一篇专门讲这个的。

2024-12-11 22:27:30 667

原创 UE5 根据数据库播放字幕 和 C++碰撞产生爆照特效

一定要在继承AActor,APawn这样的类上使用,而且一定包含了继承的头文件。但要将 NigaraFunctionLibrary的头文件加上,SpawnSystemAtLocation里的参数,也可以不用默认参数。然后就能实现 ,相同类的不同子类 ,碰撞后爆炸的效果。首先实现BlueprintImplementableEvent函数,使用插件里的蓝图静态库函数转换为FName,再读取表里的结构体。头文件,碰撞和回调函数都声明了。将这个结构体,传入RunText,加入到视口一段时间后,又消失。

2024-12-02 23:05:22 469

原创 UE5 C++ 定时器控制Component持续旋转 和 动态加载模型

3.使用管理者拿到每一个目标,如果高于一定高度,并且之前在地面上,才收。这样一个Bool就可以让这个动作有唯一性。ConfigData 是读取到JSON文件并解析的数据,通过这段代码就可以拼接一个车,飞机,轮船等模型。2.拿到静态网格组件,并定时让他旋转到一定角度,清空定时器。很简单,设置创建方法类型,并将组件添加到实例组件列表中。可得UActorComponent的三个流程。附着节点,再设置相对父节点的位置。

2024-11-09 21:55:35 429

原创 C/C++ 位运算算法小练习(二)

进制问题,主要需要将 数 % 要去的进制。/= 要去的进制。余数分别*自己的进制 N次方。这里主要使用异 运算符。都能实现互换 1变为0. 0变为1。二.位运算 实现 变量互换。

2024-10-20 23:43:34 257 1

原创 C/C++ 位运算小算法练习

对于奇偶性判断,我们关注的是整数的最低位(即二进制的最右边一位)。这是因为除了最低位以外,其他位上的数字都是2的幂次方,因此它们加起来一定是偶数。最低位的1代表的是2的0次方,即1,它决定了整数的奇偶性。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5。第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。例如,2是10,4是100,8是1000。

2024-10-20 10:02:22 369

原创 UE C++ BlueprintImplementableEvent 和 BlueprintNativeEvent再次理解

BlueprintImplementableEvent只能在蓝图定义,绝对不在cpp里定义,要在蓝图里定义。你标签里都说BlueprintImplementable 在蓝图里实现定义了,你当然不能在CPP里这样。因为蓝图里定义实现了。蓝图通信方便,但是C++虽然不实现定义,也能调用蓝图的定义逻辑。在C++可以声明和定义函数,在C++里调用该函数,蓝图重写实现该函数(蓝图可以重写或不重写C++父类函数)在C++可以声明函数(不能定义,蓝图重写),在C++里调用该函数,蓝图重写实现该函数。

2024-10-15 15:44:23 1053

原创 UE C++ 实时加载模型的总结

首先看武器的Map里是否,包含之前加载的武器模型。如果包含这个ID的武器。找到并拿到它,销毁。然后在Map里移除这个指针。如果实时加载UE模型,需要先将之前的模型删除。再生成出来,放在根节点,保持相对位置,相对的俯仰角。设置ID,让它们绑定到组件上,将根组件变为USceneComponet组件,就有位置信息。重新生成,m_WeaponType在构造时初始化,工厂然后通过,工厂生成武器。如果想要不在跟组件上,就使用如下代码。武器生成后,就可以了,然后销毁工厂。让后设置相对于根节点的相对位置。

2024-10-08 22:58:40 395

原创 UE C++ 插件读取图片(二)

图片的加载过程先通过SetCompressed将二进制文件转化为BGRA的数据,然后通过GetRaw()函数提取到数组里面赋值给Texture2D,然后通过CreateTransient创建图片信息数据。上篇文章(一)有函数,通过传入路径的文件格式,依据尾部的信息,不同的文件格式的图片的ImageWrapper。图片文件对应的原始RGBA数据是没有压缩的,且与图片格式无关,称为RawData;2.然后写的函数,将外部图片变为UTexture。图片文件数据是经过压缩的数据,称为CompressedData;

2024-09-04 21:36:46 492

原创 UE5.3 新学到的一些性能测试合计(曼巴学习笔记)

三.编辑器外,详细记录一段时间所有性能表现的工具——Unreal Insights。UE5.3的位置有所更新,在右下角的Trace里。右侧为不同的部分,CPU上的逻辑,大部分还可以追溯到 性能消耗的代码。二.查看GPU的消耗。可以记录这一刻各个部分的占用情况,只能看当前的。可以分享,保留,删除。GPU 上可以放大,具体某一刻的许多模块。2.输入命令行,profilegpu。自动开始,记录直到关闭独立运行的窗口。还有很多的技巧,可以在官方文档中学习。关闭实时渲染,并运行独立进程的游戏。

2024-09-04 11:17:30 750

原创 UE5 C++ 读取图片插件(一)

在BlueprintLibrary中用static全局函数,这样在蓝图中可以直接去调用非常方便。智能指针,虚幻底层包含原生C++,智能指针可以包裹原生C++。5.结构体用于区分,每个图片的具体信息。结构体名称不仅要F开头,而且要像个UE的类一样声明如下,可读可写。7.图片加载,加载模块ImageWrapper(build.cs里添加的模块)。判断尾部,在返回队形的相关信息。3.在TextureReaderBPLibrary.h里,添加需要使用的头文件。用于图片类型,路径类型。通过文件路径,去加载图片。

2024-09-04 09:20:33 729

原创 UE引擎内置插件信息 储存的位置

uproject。图标文件可以让UE 引擎内置插件,配置更改,比如我希望我的DataSmithImporter插件是启用的。

2024-09-02 23:19:46 371

原创 UE5 摄像机图像采集到材质 映射到 UI 和 物体表面

五,但是如果要用于UI,还需要更改SceneCapture2D的摄像机的CaptureSource为 FinalColor(LDR)。或者其它的,原来默认的 会让UI变为透明效果。三.将RenderTarget贴图放到SceneCapture2D的摄像机上Scene Capture的TextureTarget。四.这个时候的映射贴图,产生的材质可以直接。但这个方法,性能直接从120降到70,80的样子。一.创建SceneCapture2D的组件。二.创建用于 映射的 贴图。

2024-08-29 20:18:08 1191 1

原创 UE 的整形数理解

int通常占用4个字节(32位),long通常占用4个或8个字节(取决于平台,可能是32位或64位),long long通常占用8个字节(64位),而short通常占用2个或4个字节(取决于平台,可能是16位或32位)。无符号类型和带符号类型的区别在于无符号类型不能表示负数,只能表示非负数,而带符号类型可以表示正数、负数或零。例如,一个无符号的int可以表示从0到2^32-1的值,而一个带符号的int可以表示从-2^31到2^31-1的值。虚幻使用的字符类型为 TCHAR,采用 UTF-16 的编码格式。

2024-08-27 21:14:11 418

原创 Cesium 全球视角 和 多方案镜头切换

镜头切换,在一个Pawn里的多个镜头。可以使用UE中World Settings里的玩家控制器中,默认的控制器行为会对当前开启的Camera组件进行激活处理。同一个输入,可以将不同的Pawn对应不同的功能,可能相同也可能不同。这里我是让每个Pawn自己抢夺,控制权。实现不同Pawn之间的是视角切换。三.处理输入,最好在Controller里,为什么因为你的Pawn换了,你也能逻辑清晰,不必重写。但是如果是两个Pawn之间切换,就要用Poccess 掌控。1.我用这两个都行,前提是这个是在世界里的物体。

2024-08-27 19:58:02 543

原创 UE 限制PlayerController 旋转时,Pitch俯仰角一直在地面往上

原理就是 当Pitch < 0时,就 让它只能往上加。其余时候都是可以加,可以减。为什么要让它有时为0,因为有时要往下过头,影响效果。

2024-08-22 19:17:02 238

原创 镜头第三人称旋转

1.相机不基于 Controller 旋转,角色自身也不 基于 Controller 进行旋转。2.让相机臂 可以 使用 基于Controller的旋转。

2024-08-13 00:12:59 267

原创 UE5 C++跑酷练习(Part2)

一.首先GameMode里有Actor数组,组装直线路,和左右路。

2024-07-23 23:21:59 1185 2

原创 UE5 C++在Cesium上给定一个坐标垂直地面射线正交的地形高度

方法二. 在某个目标,上空射线得到位置。UE5的TransformLongitudeLatitudeHeightPositionToUnreal的支持double,UE4的可能需要改一下Cesium源码,核心逻辑如下,Pitch为-90.,俯仰向下。射线从自身射到 自身前方50000000cm,返回的FHitResult里面可以拿到距离。自身的高度-距离就是地面高度。一.方法一:需要一个Actor里,向下垂直射线。自身高度-射线距离。

2024-07-21 23:18:10 546

原创 如何获得Cesium的TileSet并设置本地服务器的Url

使用FPlatformFileManager静态类里的FileExists来检测文件,FPlatformFileManager::Get().GetPlatformFile().FileExists(*urlPath).3.拿到这个TileSet类,需要使用 Actors的数组,通过GetAllActorsOfClass函数(是不是很想蓝图那个)拿到这个世界所有这个类型的类放到这个数组里。加上你的配置文件路径。首先使用管理者获得TileSet,通过JSON文件读写,调用对应的Cesium内部提供的函数。

2024-07-18 23:12:28 1126

原创 IPV4(2)

比如主机A 有一张网卡(18.19.100.2),主机B有一张网卡(18.19.200.2),主机R有两张网卡(18.19.100.1)(18.19.200.1),分别与主机A,主机B在同一个子网。如果有主机A,B互有通向两片目标子网的网关(18.19.100.1)(18.19.200.1)间接路由。如果网关域为空,表示整个目标子网是可以通过直达路由可达的,数据包可以直接通过链路层发送。二.IPv4实现,提供了一种在不同网络的主机之间传输数据包的方法。实现该方法的关键是每台主机IP模块中的路由表。

2024-07-15 23:27:05 172

原创 UE C++ 多镜头设置缩放 平移

首先需要在 想要控制的躯体Pawn上,生成不同相机对应的SpringArm组件。其次是在Controller上,拿到这个Pawn,并在其中设置输入响应,并定义响应事件。响应事件里有指向Pawn的指针,并把Pawn的缩放平移功能进行调用。3.在MyPlayerController里面绑定输入映射,以及响应的事件。6.需要在ProjectSetting里面,设置使用的按键。1.Pawn这里,需要Poccess。5.响应事件,并操控控制到对应的Pawn里的函数。2.将Pawn自己镜头伸缩,平移功能,复原写好。

2024-07-07 16:26:52 566

原创 学习笔记· 网络层 IPV4(1)

过程如下,网络层通过链路层向一台主机发送数据包时,首先查询ARP对应的表。先发送操作为1的请求报文,给以太网广播FF:FF:FF:FF:FF:FF。子网中有两个地址是保留的,不被其他主机使用。一个是网络地址,子网中任意IP地址与子网掩码按位与得到的结果。一个是广播地址,子网掩码按位非的结果,再与网络地址按位或的结果。这个“或”运算也是一个二进制操作,它比较两个数的每一位,只要有一个数为1,结果就为1。链路层用于找到IP地址对应的MAC地址,虽然破坏了网络层的抽象,但可以视其为两层之间的桥梁。

2024-07-02 23:17:16 394

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除