- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 UE4C++ Http下载文件
成果功能:点击一个按钮可以远程下载文件 并看得到进度条先上代码.h文件// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "UObject/Object.h"#include "Interfaces/IHttpRequest.h"#include "RuntimeFilesDownloader
2022-05-17 17:26:38
2041
1
原创 UE4C++存档系统
本篇文章主要是做功能演示和教程 这为了方便所以使用按键输入进行操作1.绑定输入按键 打开UE4项目设置->找到Input(输入)->绑定事件2.创建C++ SaveGame类3.在C++ SaveGame类内创建出需要的保存的变量#pragma once#include "CoreMinimal.h"#include "GameFramework/SaveGame.h"#include "MySaveGame.generated.h"/** * */UCLAS
2022-04-25 14:49:28
2323
2
原创 ue4 读取本地文件
UE4C++ 读取本地文本文件1.创建文件路径 FString LoadDir = FPaths::ProjectContentDir()/TEXT("LoadText.txt"); //文件路径2.判断文件是否存在if (!FFileManagerGeneric::Get().FileExists(*LoadDir)) //判断是否存在文件 { FPaths::MakeValidFileName(LoadDir); //创建文件 FFileHelper::SaveStringToFi
2022-01-24 17:36:46
5228
原创 UE4数据写入Json格式
用UE4写入Json很简单只需要使用TSharedPtr<TJsonWriter<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>> JsonWriter =TJsonWriterFactory<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>::Create(&JsonString);这个共享指针即可写法 JsonWriter->WriteObjectSta
2022-01-03 21:02:07
1387
原创 UE4 按钮选中功能(UMG蓝图)
首先创建UMG一个按钮在该按钮的Widget下创建一个函数功能如下 设置按钮风格点击Click 然后调用事件分发器参数为自身判断是否选中创建一个主的Widget按钮为咱们自定义的按钮做一个双击判定即可...
2021-11-08 16:11:03
2555
原创 UE4 智能指针优缺点
为什么使用UE智能指针?1.std::shared_ptr并不是在所有平台都可以使用的。2.使用虚幻指针可以和其他虚幻容器及类型无缝协作。3.提供线程安全可以更好的获取性能等。UE4智能指针库整体的优点1.可以像操作常规C++指针那样来复制、解引用及共享指针。2.当没有共享引用时资源自动销毁。3.支持const 前置声明不完全类型、类型转换等。4.包含了多线程安全进行访问”线程安全“版本。UE4智能指针性能上的优势1.所有操作所占时间都是固定的。2.共享指针解引用速度和C++指针一样快
2021-10-28 11:50:33
732
原创 C++ 随机数小程序
C++随机数小程序#include <iostream>#include <time.h>#include <windows.h>#include <tchar.h>using namespace std;//打印界面void love() { float x, y; for (y = 1.5f; y > -1.5f; y -= 0.1f) { for (x = -1.5f; x < 1.5f; x += 0.05f)
2021-09-28 19:09:51
207
原创 C++虚函数调用方式
基础:直接调用在反汇编里 Call的是一个地址 硬编码为E8…。间接调用在反汇编里是Call [] 硬编码一般为FF …什么是虚函数?虚函数就是函数面前加个virtual观察虚函数的调用方式->通过创建对象的方式观察虚函数演示代码#include <iostream>using namespace std;class Base {public: void Function_1() { cout << "函数1" << endl; }
2021-09-20 11:02:46
2384
原创 C++防止程序多开
首先我们要知道程序天生就可以多开的且每次运行都是拥有自己独立的内存空间。但我们可以发现类似游戏这些程序是不能多开的,他们是怎么做的呢?这里教大家一个最简单的方法。HANDLE g_hEvent; //定义一个句柄int main() { g_hEvent = CreateEventW(NULL, 0, 0, LPCWSTR("Hi")); SetEvent(g_hEvent); if (g_hEvent) { if (ERROR_ALREADY_EXISTS == GetLa
2021-09-11 20:41:44
1541
原创 虚幻4(UE4) 读取XML文件方式
虚幻4引擎 读取XML文件1.导入XmlParser模块2.1读取方式一从根节点读//读XML文档 TSharedPtr<FXmlFile> xmlRead(new FXmlFile(TEXT("D:\\UEclass\\UECPP\\XML\\Data.xml"))); //TEXT里内容为文件目录 //读取根 FXmlNode * RootNode = xmlRead->GetRootNode(); //读取当前节点下的所有子节点 TArray<FXmlNo
2021-08-25 10:38:18
1353
原创 虚幻4 读取Json文件数据
虚幻4读取Json文件数据1.用虚幻C++读取文件目录TEXT(内写文件路径以及名称)FString DATA; if (FFileHelper::LoadFileToString(DATA, TEXT("D:\\UEclass\\ShaperPointer\\Saved\\data.json"))) { GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Green,TEXT("Got IT")); }2.读取Json数据拿我的Jso
2021-08-24 15:48:08
754
原创 虚幻骨骼重定向-TPos
1.把该文件导入虚幻内选择UE默认小人2.在动画内创建POS3.给自己的人物设置骨骼4.修改默认骨骼状态5.找到要重定向动画点击重定向如果没有打开自己的骨骼 这里有应用预览文件地址链接:https://pan.baidu.com/s/1wzYSDuQcsn5zJ9kAuR_umg提取码:tn8g...
2021-08-04 17:23:18
447
原创 VA无法导入虚幻头文件->手动导入
在开发虚幻项目的时候 经常会遇到VA插件会莫名失灵 无法导入虚幻所需对应的头文件,那么如何手动导入呢?例:无法导入头文件解决方法:手动导入1.找到需要导入头文件的类型2.对着改类型按F12快捷键 我们可以进入源文件内查看3.查找需要导入的头文件4.Classes后面的就是头文件 我们可以用VA自动导去验证发现是一样的...
2021-08-03 12:53:40
365
原创 C++ 简单模拟谷歌数字1000以内数字翻译
谷歌翻译程序翻译代码:#include <iostream>#include <string>using namespace std;//对应字符string NUMBER[] = { "","one ","two ","three ","four ","five ","six ","seven ","eight ","nine ","ten ","eleven ","twelve ","thirteen ","fourteen " , "fifteen "
2021-07-26 09:42:07
322
原创 Unreal渲染架构
1.延迟渲染虚幻对于场景中所有不透明物体的渲染方式是延迟渲染对于透明物体的渲染方式则是 前向渲染延迟渲染解决场景中由于物体、光照数量带来的计算复杂度问题 如:假设场景中有3个物体和3个光源,每个物体都单独计算光照 那么计算量将是3x3 = 9次光照计算。随着光源数量的提升计算的计算量会呈几何数上升。这样的代价是非常高的。而延迟渲染会把物体的颜色,粗糙度 、法线等分别渲染成图片,然后根据这些图片逐个计算光照。好处:无论场景中有多少个物体经过光照 准备阶段都是变成了几张图片随着光源数量增多,延迟渲染节
2021-07-15 18:28:30
556
原创 Unreal C++ 资源加载 (UE4C++)
在虚幻冲处理资源分为:类资源和非类资源。资产加载到内存中,需要通过引用完成。引用分两种:硬性引用,软性引用。1.硬性引用:即对象A引用对象B,并导致对象B在对象A加载时加载。2.软性引用:既对象A通过间接机制来引用对象B。什么是引用?答:对于资产在内存当中的存储的一种操作方式。硬性引用写法:.h头文件UPROPERTY(EditDefaultsOnly)UClass * 变量名;.cpp文件GetWorld()->GetWorld()->SpawnActor(变量名)
2021-07-13 12:36:43
1787
原创 浅谈C/C++指针
1. 指针的定义:指针就是其值为内存地址的变量。一个变量可以直接存放一个特定的数值,而一个指针存放的值则是另外一个有值变量的地址值。变量名是直接引用变量值的,而指针则是间接引用变量值。通过指针引用一个值被称为间接寻址。指针必须定义后才能使用!//初始化int * NumberPtr读法为:NumberPtr是一个指针,指向int取地址运算符&是一个一元运算符,该运算返回的结果是操作数的地址值。例如int y = 5;int *yPtr;yPtr = &y;yPtr =
2021-07-13 11:57:51
217
原创 浅谈Unreal中TArray容器
<UEC++容器>容器是方便存储数据的载体2.虚幻提供了三种容器:TArry,TMap,TSet。虚幻提供的容器都是同质容器,只能用来存储相同类型的数据。三种容器具备不同的特性,针对不同的特性,我们可以根据使用场景选择操作的容器.3.虚幻中的容器使用泛型特性进行构建。TArray 特点: 速度快,内存消耗小,安全性高TArray为同质容器:其所有元素均完全为相同类型。不能进行不同元素类型的混合!TArray被设计成值类型 所以无法被继承!不能使用new和delete 在堆上进行
2021-07-13 11:21:55
1931
原创 UEC++ FString的那些事
关于本博客的内容包含:1.FString声明2.数据类型转换3.字符串比较4.查询指定字符5.查询指定字符位置6.裁切字符串7.拼接字符串1.FString的构建声明方式 FString str; FString str1 = FString(TEXT("HAHAH")); FString str2 = (TEXT("SDA"));调用方法GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, str1); //测试效果
2021-07-06 21:52:35
2225
原创 《UEC++ DestroyActor回调 通知》
1.在头文件内写入回调函数Destroyed函数并不会在内存中消亡 只会在世界中销毁.h文件 //通知 / 回调函数 virtual void Destroyed(); virtual void EndPlay(EEndPlayReason::Type mytype).cpp文件void AMyTestActor::Destroyed(){ //这里写回调功能即可}2.演示案例先在GameMode里生成一个Actor类auto TestActor = GetWorld(
2021-07-06 16:52:27
651
原创 IDA逆向_循环
1.程序输入结果2.进入IDA打开流程图逆向分析:可以看出mov [ebp+var_4], 0C0hmov [ebp+var_8], 0Ah定义后会调转到401041所以我们在VS内定义2个变量这里cmp [ebp+var_8], 0代表ebp+var_8和0 有个小于的比较如果进去就运行到cmp [ebp+var_4], 4 否则跳出到打印我们假设一个for循环条件为可以看出这个分支 是如果满足条件直接跳出这个循环到打印所以可以判断
2021-05-26 09:07:21
416
原创 C语言写个简单的虚拟机
伪代码:寄存器用变量表示 内存用数组表示定义宏定义为操作码功能1.数据定义2.打印功能3.错误判断1.数据定义{定义寄存器定义计数器定义指针寄存器(指向下一条将要执行的指令EIP)定义操作码定义操作数}2.打印函数{打印信息}3.错误判断{判断是否溢出判断除数}main函数{do{do{ }whlie}whlie输入do{SWITCH语句执行操作}(操作码不等于43)}#define _CRT_SECURE_NO_WARNING
2020-05-28 20:11:18
1483
1
原创 迷宫游戏的原理!
此代码功能随机生成任意难度迷宫:) 所有迷宫原理八九不离十#include <stdio.h>#include <math.h>#include <stdbool.h>#define NUMBER 50#define RANK 80char arr[NUMBER][NUMBER];int fx[4] = { -1,1,0,0 };int fy[4] = { 0,0,-1,1 };/*起始坐标*/int firstx = 0;int firsty
2020-05-27 19:53:21
1161
原创 写一个简单的迷宫
二话不说 上迷宫代码!#include <stdio.h>#include <stdbool.h>#define NUMBER 13int fx[4] = { -1,1,0,0 };int fy[4] = { 0,0,-1,1 };void prin(char arr[][NUMBER]); //打印bool work(char arr[][NUMBER],int x,int y); //判断是否可以走bool mymap(char arr[][NUMBER],
2020-05-26 17:53:20
227
原创 C语言写龟兔赛跑小游戏
伪代码:1.数据定义2.打印赛道3.开始比赛4.输出比赛结果1.数据定义{1.1赛道长度NUMBER 70 //宏定义//全局1.2定义一个字符串赛道 tracks[NUMBER]1.3定义兔子的当前步数tmyrabbit1.4定义乌龟的当前步数mytortoise}2.打印赛道{2.1打印字符 '-' //表示赛道 长度为NUMBER 702.2 赛道初始化为 ' '}3.开始比赛do{ for(int i = 0; i < NUM.
2020-05-24 20:18:19
1264
原创 C++制作回收站清理工具
void CclearDlg::OnBnClickedButton1(){ HWND m_hand = FindWindowA(NULL,"地址: 回收站"); GetWindowLong(m_hand, 0); SHEmptyRecycleBin(m_hand, NULL, SHERB_NOCONFIRMATION || SHERB_NOPROGRESSUI || SHERB_NOSOU...
2020-01-15 11:37:36
299
原创 禁止0xCC断点(最简单的反调试手段)
#include <iostream>#include <windows.h>using namespace std;int main() { FARPROC Uaddr; BYTE Mark = 0; (FARPROC&)Uaddr = GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA"); ...
2019-09-23 15:38:05
502
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人