问题 众所周知 UE 的 HTML5 平台默认显示如下。 这存在如下几个问题。 Canvas 只在中间显示。 下面有多余的按钮。 解决 将 Canvas 设置为自适应分辨率。 将 Project Settings > Platforms > HTML5 > Canvas Scaling Mode 设置为 Stretch 。 将 Canvas Wrapper 设置为自适应分辨率。 修改 .css 文件中如下一段。 .wrapper { position: relative; ma
作者: _Redstone_c_
在 C++ 中对应 \x200f ,Alt码 为 8207 的特殊字符。
PS:由于 WP-Editor.md 的 Bug ,脚本中的 $ 符号不显示,需手动添加。 PS:换成 WP Githuber MD 之后就没有这个 Bug 了。 解决方案 cmake_minimum_required (VERSION 3.8) # Main project string(REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}) project ($
虚幻引擎打包时,将在根目录中创建 BootstrapPackagedGame 启动 EXE 文件,并在 Binaries/Win64 中放置真正的 UE4 游戏 EXE 文件。 它通过以下过程创建: 将 引擎/Binaries/[平台]/BootstrapPackagedGame-[平台]-Shipping.exe 文件复制到根目录 更新 Build/Windows/Application.ico 图标 更新要执行的游戏 EXE 文件相对路径参数 更新游戏的基本参数 BootstrapPacka
class FTestTask { public: FTestTask(const FString& InTaskName) : TaskName(InTaskName) { } TStatId GetStatId() { RETURN_QUICK_DECLARE_CYCLE_STAT(TestTask, STATGROUP_TaskGraphTasks); } ENamedThreads::Type GetDesiredThread() { return ENamedThreads::
众所周知,UE 没有提供优先队列这一常用容器。 但是在 TArray 中有一些堆函数,可以实现优先队列的操作。 这里提供一个简单封装,其中 Priority 值越小优先级越高。 template<typename ElementType, typename ArrayAllocator = FDefaultAllocator> class TRFurPriorityQueue { public: FORCEINLINE TRFurPriorityQueue() = default;
加锁的原则 规则10.1 多线程 进程并行访问共享资源时 一定要加锁保护 共享资源包括全局变量,静态变量,共享内存,文件等。 建议封装像智能指针一样的对象对锁进行管理,比如我们就封装了一个 auto_lock ,在构造时申请锁,析构中释放锁,保证不会忘记解锁。 规则10.2 锁的职责单一 每个锁只锁一个唯一共享资源,这样,才能保证锁应用的单一,也能更好的确保加锁的范围尽 量小。对于共享全局资源,应该根据实际需要,每类或每个资源,有一把锁。这样,这把锁只锁对这个资源访问的代码,通常这样的代码都会是
本文用来水暑假的研究性学习报告 不要认真 摘要 本文给出了朴素 Marching Cubes 算法体素网格体在 Unreal Engine 4 中的实现方案,通过生成一个具有“光滑”表面的球体来演示算法的可行性。 关键词 MarchingCubes UnrealEngine 网格重建 游戏开发 研究背景 《Minecraft》是当下比较火热的游戏之一,他的体素地形系统大大提高了玩家对地形的修改能力,使得自由度大大提高,其体素表示是基于 立方体 而不是 Mesh ,这使得其对曲面的表达能力受限,同
本文用来水暑假的研究性学习报告 摘要 本文给出了一种基于 HFish 的网络威胁捕捉与诱骗系统的简单搭建模式,并通过此系统捕捉了当今互联网上的部分网络攻击,通过这些数据进行简单的整理分析,透漏出网络中的潜在威胁。 关键词 网络安全 黑客攻击 网络攻防 密码破译 研究背景 作为一个小型个人网站的站主,可能并不会感觉到自己的网站被扫描与攻击,但实际上,互联网中有不少潜在的威胁。网站在明处,潜在威胁在暗处,并不容易对潜在威胁做定性定量分析,所以就需要威胁捕捉与诱骗系统通过模仿真实网站的行为,捕捉潜在的
引擎: UE4.26.2 构建版本 事情的起因是写体素构建器的时候,想生成个球,就想到抄材质的 SphereMask 节点。 这里以 SphereMask 节点为例,分析材质蓝图节点的定义。 UMaterialExpression 材质节点的 C++ 父类为 UMaterialExpression ,定义在 MaterialExpression.h 头文件中,所有原生材质节点均为此类的子类,此类主要成员如下。 virtual int32 Compile(class FMaterialCompil
问题 在从 UE4.24 升级到 UE4.26 后,想打包安卓,删除了以前的 NDK 然后根据官网指示安装新的 NDK ,在打包时提示打包失败,Log 关键内容如下。 UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): ====2021-08-09 14:35:59====PERFORMING FINAL APK PACKAGE OPERATION=====-armv7====================================
这是 2021年山大未来科学营(夏季)- 人工智能与发明创造未来科学营 的作业 所以看看就行 基本信息 名称:远程智能房间巡逻警报机器人 解决家里/房间长期无人,但是有设备运行或其他需求,需要远程监控。可以方便远程监控家中环境,监控设备的运行状态,并且具有良好的机动性和灵活性,可以适应不同的房间环境。 硬件连接图 graph LR 摄像头 — 树莓派 超声传感器 — 扩展板 5路组件 — 扩展板 树莓派 — 扩展板 扩展板 — 电机驱动板 扩展板 — 测速左 扩展板 —
假设我们有一个带 USTRUCT 宏的结构体,我们希望在蓝图中可以以自己的方式 Make 或者 Break ,这个需求通常是因为我们在结构体里用了 C++ 中不支持反射的成员。 USTRUCT(BlueprintType, Meta = (HasNativeMake, HasNativeBreak)) struct FMeshVertex { GENERATED_BODY() UPROPERTY(EditAnywhere) FVector Position; UPROPERTY(EditAnyw
Establish Battlefield Control, Stand By — 战场控制建立,请等待。 Battle Control Online — 作战控制连线。 Incoming Transmission — 信号输入。 New Objective Received — 收到新的任务目标。 Objective Complete — 任务目标完成。 Mission Accomplished — 任务完成。 Missi
Lengyel-VoxelTerrain.pdf
ParallelFor 是 UE 内置的支持多线程并行处理任务的 For 循环,在渲染系统中应用得相当普遍。 调用方式 函数签名 void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread = false); void ParallelFor(int32 Num, TFunctionRef<void(int32)>
UFUNCTION() virtual void FunctionName(…) PURE_VIRTUAL(ClassName::FunctionName, … );
CornerCoordOffset[8] – 表示顶点索引到顶点空间位置的映射,如 CornerCoordOffset[0] = (0,0,0) 表示 顶点-0 的位置是 (0,0,0) 。 Triangulation[256][5][3] – 表示三角形拆分,可以通过顶点状态(通过位掩码)拆分三角形,得到三角形对应的边索引,如 Triangulation[2][0][0] = 0 表示 顶点-1 在“内部”其余顶点在“外部”时,第一个三角形的第一个顶点在 边-0 上。
Vertices = { { -50.0f, -50.0f, -50.0f }, { 50.0f, -50.0f, -50.0f }, { 50.0f, 50.0f, -50.0f }, { 50.0f, 50.0f, -50.0f }, { -50.0f, 50.0f, -50.0f }, { -50.0f, -50.0f, -50.0f }, { -50.0f, -50.0f, 50.0f }, { 50.0f, -50.0f, 50.0f }, { 50.0f, 50.0f, 50.0f
基于 Mermaid 类图规范编写: Mermaid: Class diagrams “在软件工程中,统一建模语言 (UML) 中的类图是一种静态结构图,它通过显示系统中的类以及它们的属性和操作(或方法)再加上类之间的关系来描述系统的结构。” 维基百科 类图是面向对象建模的主要构建基础。它可以用于应用程序一般结构的概念建模,以及将模型转换为编程语言代码的详细建模。类图也可用于数据建模。类图中的类表示应用中的主要元素、交互和要编程的类。 Mermaid 可以渲染类图。 classDiagram A
引擎: UE4.26.2 构建版本 StaticMesh 简称 SM ,表示引擎中的 静态网格体 ,在新版本的引擎中, SM 也被允许在运行时构建,渲染一个 SM 需要 SMC 的支持, SMC 使用 静态/动态渲染路径 ,在允许的情况下优先使用 静态渲染路径 ,会缓存所有渲染命令。 类图 UStaticMesh 类图 classDiagram IInterface_AssetUserData <|.. UStaticMesh Interface_CollisionDataProvider
引擎: UE4.26.2 构建版本 ProceduralMeshComponent 简称 PMC ,提供一个程序化网格组件,可以通过自定义的三角形制作可渲染网格,使用动态渲染路径,在每帧收集渲染数据,没有任何数据缓存。 类结构 游戏 类图 classDiagram Interface_CollisionDataProvider <|.. UProceduralMeshComponent FPrimitiveSceneProxy <|– FProceduralMeshScenePro
众所周知 UE4 把 RTTI 给禁止了,这导致 dynamic_cast 的支持是不完全的,也就是说不支持从基类转换到子类,但是在阅读 TSoftObjectPtr (SoftObjectPtr.h) 代码时却看到: /** * Dereference the soft pointer. * * @return nullptr if this object is gone or the lazy pointer was null, otherwise a valid UObject point
开始记录状态到文件 stat startfile 停止记录状态到文件 stat stopfile 便捷作用域计时器 可以直接使用 QUICK_SCOPE_CYCLE_COUNTER(STAT_ClassName_FunctionName); 声明状态组 DECLARE_STATS_GROUP(TEXT("Group Name"), STATGROUP_GroupName, STATCAT_Advanced); 声明计数器 DECLARE_DWORD_ACCUMULATOR_S
成果 引擎版本 4.26.2 实现一个 UTexture2DArray 包裹器。 支持在 Runtime 的纹理数组创建与修改。 支持纹理数组 MipMap (官方实现只有第0层Mip)。 效果图 此纹理数组共5个元素,5个 Mip 层级。 其中,横向为元素,纵向为 Mip 层级。 代码 Texture2DArrayWrapper.h #pragma once #include "CoreMinimal.h" #include "UObject/Object.h&q
N 北 X+ S 南 X- E 东 Y+ W 西 Y- T 上 Z+ B 下 Z-
表现 Assertion failed: !FPaths::IsRelative(Dir) [File:/Engine/Source/Runtime/Projects/Private/ProjectDescriptor.cpp] [Line: 337] ../../../UGCExample/../RemappedPlugins/ is not an absolute path 解决方案 将 ProjectDescriptor.cpp 第 143 行处修改: // If this is a pa
为了防止 ICP 信息硬编码,试图修改主题 PHP 代码时发现,主题自带一个底部社交菜单,但是社交菜单会把菜单项换成图片,此操作是完全通过 CSS 代码进行的,所以只需要在自定义 CSS 中加入下面的 CSS 代码,即可覆盖。此代码通过重置社交区域的 li a 标签设置使其恢复文本显示。 .social-menu li a { all: revert; all: unset; } .social-menu { display: -webkit-box; display: -ms-flexbox;
void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction<void()> Function); 一般任务线程: ENamedThreads::AnyHiPriThreadNormalTask 一般回调线程: ENamedThreads::GameThread
PRAGMA_DISABLE_OPTIMIZATION // Code PRAGMA_ENABLE_OPTIMIZATION
原文传送门 FRunnable & FRunnableThread FRunnable提供了最为原始的线程支持,类似std::Thread,虽然没那么优雅,但是功能略多于std::Thread FRunnable—-承载业务逻辑 +[f] Init : 初始化,可以失败 +[f] Run : 线程运行函数,返回退出代码 +[f] Stop : 提前终止这个线程 +[f] Exit : 进行退出前的清理 +[f] GetSingleThreadInterface : 平台不支持
原生插件 Adblock Plus – 通用广告拦截器 Adblock for Youtube™ – Youtube 广告拦截器 Dark Reader – 自适应暗色主题 Proxy SwitchyOmega – 网络代理智能控制 Tampermonkey – 油猴插件支持 User-Agent Switcher and Manager – 伪造客户端信息 Violentmonkey – 油猴插件支持 YouT
lli fac[maxn]; // 阶乘 lli inv[maxn]; // 逆元 lli invf[maxn]; // 逆元的阶乘 inline void init() { fac[0] = 1; for (lli i = 1; i < maxn; ++i) fac[i] = fac[i – 1] * i % mod; inv[1] = 1; for (lli i = 2; i < maxn; ++i) inv[i] = inv[mod % i] * (mod – mod / i)
struct fenwick_tree_t { lli n; vector<lli> tre; fenwick_tree_t(lli n) : n(n), tre(n + 1, 0) { } lli lowbit(lli x) { return x & -x; } void build(lli* arr) { for (lli i = 1; i <= n; ++i) upd(i, arr[i]); } void upd(lli i, lli x) { for (; i
lli gcd(lli x, lli y) { return y ? gcd(y, x % y) : x; }
std::chrono::system_clock::time_point bt = std::chrono::system_clock::now(); std::chrono::system_clock::time_point et = std::chrono::system_clock::now(); std::chrono::nanoseconds dt = std::chrono::duration_cast<std::chrono::nanoseconds>(et – bt
[ 络谷 ] lli dsu[maxn]; lli dis[maxn]; lli num[maxn]; void init_dsu() { for (lli i = 0; i < maxn; ++i) dsu[i] = i; for (lli i = 0; i < maxn; ++i) dis[i] = 0; for (lli i = 0; i < maxn; ++i) num[i] = 1; } lli find_dsu(lli x) { if (dsu[x] == x) r
约定存边方式为从左部到右部的有向边,左右部点编号相同 匈牙利算法 lli mch[maxn]; lli vis[maxn]; bool dfs_hun(lli u, lli dfn) { if (vis[u] == dfn) return false; vis[u] = dfn; for (lli i = head[u]; ~i; i = edge[i].nxt) { lli v = edge[i].v; if (mch[v] == 0 || dfs_hun(mch[v], dfn)) { mc
倍增思想 由 倍增 LCA 改的 lli mw[32][maxn]; lli fa[32][maxn]; lli dep[maxn]; void dfs_mw(lli u) { dep[u] = dep[fa[0][u]] + 1; for (lli i = 1; (1 << i) <= dep[u]; ++i) fa[i][u] = fa[i – 1][fa[i – 1][u]]; for (lli i = 1; (1 << i) <= dep[u]; ++
lli n; lli arr[maxn]; lli lg[maxn]; lli st[maxn][32]; inline lli flg(lli x) { if (lg[x]) return lg[x]; lli tmp = x; lli res = 0; while (tmp) tmp >>= 1, ++res; return lg[x] = res – 1; } inline void init_st() { for (lli i = 1; i <= n; ++i) st[
络谷 P1962 斐波那契数列