PaperMod’s Demo

👋 Welcome to demo page of Hugo’s theme PaperMod!

  • ·PaperMod is designed to be clean and simple but fast and responsive theme with useful feature-set that enhances UX.
  • ·Feel free to show your support by giving us a star 🌟 on GitHub and sharing with your friends and social media .
  • ·PaperMod is based on theme Paper.

Github中SSH密钥配置流程

一、SSH 是什么 SSH(Secure Shell)是一种加密网络协议。在 Git 场景下,SSH 密钥对用来代替密码向 GitHub 证明身份。 核心原理: 私钥留在本地电脑,永远不要分享 公钥上传到 GitHub 推送/拉取代码时,本地用私钥签名,GitHub 用公钥验证 二、配置流程(共 6 步) 步骤 1:检查是否已有 SSH 密钥 1 ls -al ~/.ssh/ 命令拆解: ls:list,列出目录下的文件 -a:显示所有文件(包括 . 开头的隐藏文件) -l:以长格式显示(权限、大小、日期等) ~:用户主目录,Windows 上即 C:\Users\用户名 .ssh/:SSH 配置目录(隐藏文件夹) 如果看到 id_ed25519 和 id_ed25519.pub,说明已有密钥,可跳过步骤 2。 如果只有 known_hosts 或目录为空,说明没有密钥,继续下一步。 步骤 2:生成新的 SSH 密钥 1 ssh-keygen -t ed25519 -C "你的GitHub邮箱" 命令拆解: ssh-keygen:SSH 密钥生成工具 -t ed25519:指定算法为 Ed25519(比 RSA 更短更安全更快,目前最推荐) -C "邮箱":注释,方便日后识别密钥归属 执行后两个交互提示: 保存位置 → 直接回车,使用默认路径 ~/.ssh/id_ed25519 passphrase(口令) → 可留空回车,也可设密码保护私钥 生成结果:....

六月 4, 2026 · Imrcao

使用UE4原生模块进行简单UDP广播和数据接收

前言: 最近在学习UE4网络相关知识,尝试学习使用 UDP做一个分布式服务器(后面会出相关文章),这里简单记录一下如何使用 UE4的“Sockets”模块和“Networking”模块进行UDP广播。 操作步骤: 1、首先创建两个空的UE4C++工程(我这里使用的是UE426版本引擎),一个用来广播数据,一个用来接收数据,在两个工程分别创建继承自UObject的类,分别命名为“ UDPSend”和“ UDPRecive”,还需在".build.cs"文件中添加模块“Sockets", “Networking”,示例如下代码所示。 2、为了清晰可见,直接上代码(部分代码是网上粘贴的,我这里只是想记录的同时再复习一遍,也方便自己后续查阅)。 3、编译后启动引擎,将两个基于C++的蓝图类,分别拖入到场景中(用来广播的工程只用创建UDPSend,用来接收的工程只用创建“UDPRecive”)。拖入场景中后,在UDPSend中调用函数“StartUDPSender()”,传入网络套接字、 IP、端口号即可。UDP开启后,可以TICK执行广播数据(调用函数RamaUDPSender_SendString());接收数据的工程也是一样,将对应类拖入场景中,打开蓝图编辑器,先调用函数StartUDPReceiver(),再调用函数DataRecv()。两个工程要同时运行,这样就能广播和接收数据了。 using UnrealBuildTool; public class UDPTest426 : ModuleRules { public UDPTest426(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 PublicDependencyModuleNames....

六月 3, 2026 · Imrcao

使用Perforce管理Unreal Engine项目

前言 在本指南中你将了解如何使用Perforec管理UE项目,包括Perforce部署、安装、使用。我使用了家中电脑和公司电脑作为两个客户端,还有一台腾讯云服务器作用来托管Perforce。 下载 在Perforce官网(https://www.perforce.com/downloads)下载Perforce的服务器(Helix Core(P4D) Server)和客户端(Helix Visual Client(P4V)),直接搜英文名下载即可。 部署Perforce服务器 使用PC自带的远程桌面登录访问腾讯云服务器,将下载好的perforce服务器安装包拷贝到腾讯云上或者直接在腾讯云上下载。双击安装包运行,如图所示; 默认端口号为1666,如果和你本地端口冲突也可以自定义端口。点击“Change”选择一个用来存放资产的目录,如下图所示; 自定义你的User Name,客户端连接的服务器的时候会用到这个User Name。安装完毕后点击“exit”即可。如下图所示; 检测Perforce服务器是否运行成功。在命令行工具中输入“netstat -a"回车,会发现有端口为1666的程序在运行,说明Perforce安装部署成功。如下图所示; 安装Perforce客户端 双击安装包,默认全部勾选,选择安装路径后,点击”Next“。如图所示: 输入你的服务器公网IP地址和端口号(x.x.x.x:1666)以及在服务器中刚刚输入的User Name,最后一栏默认选择即可,点击”Next“。 创建一个”User“和”Workspace“。创建用户时可以不用输入密码。如下图所示。 创建好用户和工作空间后点击OK,会弹出来一个窗口让你上传文件到服务器。你可以指定一个文件夹或者创建一个文件夹,文件夹内需要有资产。如下图所示。 我这里选择”Use a classic depot“,看自己需要。如下图。 简单使用 点击”Get Latest“获取服务器最新资产;点击”Checkout“检出需要操作的资产;点击”Add“添加新的资产;点击”Submit“提交修改的资产; 使用 Unreal Engine 连接 Perforce 服务器 直接在Perforce中打开Unreal项目,在编辑器的右下角找到“Source Control”,点击选择“”,在弹出来的面板中输入服务器IP和端口,以及本地Perforce用户名和工作空间的名称,点击“Accept Settings”即可。 其它 Tips 1、当你不小心添加了很多无用的文件到DefaultList中,可以右键单击某一个Change列表,选择Revert Files,恢复。

五月 29, 2026 · Imrcao

Github配合Sourcetree管理UE4工程

一、创建私有仓库 这一步不详细记录 注意:创建仓库的时候选择添加gitIgnore文件,文件模板选择“UnrealEngine” 二、随便传几个文件 三、创建SSH密钥(核心) 使用SSH密钥克隆仓库,首要需要创建SSH密钥。 创建SSH密钥入口:点击头像选中“Settings” 根据链接中的提示创建 链接:https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent 安装Git for Windows(它自带 Git Bash) 管理员运行cmd,执行: 1 git-installer.exe /VERYSILENT /NORESTART 安装验证: 1 git --version 首先打开Git Bash(可以从SourceTree中启动) 先执行: 1 ssh-keygen -t ed25519 -C "your_email@example.com" //这里换成自己的邮箱 接着会出来: 1 Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter] //直接点回车就行 接着会让你输入两次密码:(19960525) 1 2 Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again] 最终命令行如下: 结果会生成两个文件: 将这个key放到刚才在GitHub创建ssH文件的地方: 这样就可以复制ssh链接准备开始克隆了。 四、安装sourceTree(下载),安装过程中可能需要注册一下账号.. 这里打开终端: 输入ssh链接,指定目录克隆即可。 五、指定需要版本控制的文件 一般来说传这几个文件...

五月 29, 2026 · Imrcao

使用Git命令常见问题

克隆命令 1 git clone GitHub地址 条件:首先需要魔法上网,否则国内是无法连接GitHub的。其次需要设置代理的端口,否则也会提示连接失败。 1 2 3 git clone https://github.com/neilsonnn/image-blaster "F:/00_Imrcao/01_MyProject/ImageBlaster" Cloning into 'F:/00_Imrcao/01_MyProject/ImageBlaster'... fatal: unable to access 'https://github.com/neilsonnn/image-blaster/': Failed to connect to github.com p 设置代理端口 1 2 git config --global http.proxy http://127.0.0.1:<端口> git config --global https.proxy http://127.0.0.1:<端口> 清除代理端口: 1 2 git config --global --unset http.proxy git config --global --unset https.proxy 查看代理端口: 1 2 git config --global --get http.proxy git config --global --get https.proxy 常用git命令 初始化与首次提交 1 2 3 git init # 在当前目录初始化 Git 仓库 git add ....

五月 29, 2026 · Imrcao

从零搭建全自动化极客博客 (Obsidian + Hugo + Vercel)

一、引言:为什么选择这套工作流? 痛点分析: 我之前使用的是wordpress + WampServer + 阿里云创建的网站,这个流程最大的缺点就是在编辑笔记时需要去wordpress后台,后台不仅慢,编辑起来还费劲,虽然也可以在Obsidian中配合wordpress插件,但总还是感觉wordpress臃肿,不仅如此,服务器使用的是轻量级的,只有2M的带宽,访问很慢,而且域名备案流程繁琐且缓慢。接下来我介绍的流程可以免费托管,只需要为域名付费即可,而且域名无需在国内备案。 我的终极解法: 一套本地丝滑写作、云端自动构建、且几乎零成本的现代化技术博客方案。 核心技术栈预览: Obsidian (本地编辑) + PicGo (图床管理) + Hugo (静态生成) + GitHub (版本控制) + Vercel (全球部署)。 二、 构建本地终极写作环境 (Obsidian 篇) 1. 认识 Obsidian 为什么它是技术笔记的神器(Markdown 原生、双链、极速响应),在遇到Obsidian之前我使用的是有道云和xmind,随着笔记内容越来越多有道云启动都要半天,现在还有好多广告。Obsidian完全本地化管理,数据安全,社区插件生态丰富,可以创建白板,一定程度上可以取代xmind。下载链接:https://obsidian.md/zh/ 2. 图文分离:优雅的图片管理方案 (PicGo) (1)、本地图片的痛点(分享不便、打包体积大)。技术笔记里面通常有很多图片,当积累一定规模时,无论时分享还是传到Github上进行云端备份都是一个棘手的问题。如果将笔记部署到网站里,那么图片多的时候往往加载很慢,对服务器带宽是一个极大的考验。所以图文分离是一个很有必要的步骤。 (2)、配置阿里云OSS对象存储。关于OSS不细述,只讲几个关键点。首先是关于AccessKey的,点击头像找到“权限与安全->AccessKey”,我这里使用RAM用户AccessKey,如图1所示。然后根据配置执行生成即可,保存好你的AccessID和Key,只显示一次。然后进入对象存储OSS控制页面,先创建一个bucket,点击创建的bucket,找到权限控制->阻止公共访问,点击关闭,如图2所示。在同一个页面,找到读写权限,将“Bucket ACL"设置为公共读。不然当你将图片链接放入笔记中时并不会正常显示图片。OSS有桌面版可视化管理工具,也可以下载使用。 (3)、配置 PicGo 图床方案(搭配阿里云 OSS 云存储)。首先安装PicGo,Github下载链接:https://github.com/Molunerfinn/PicGo/releases。我下载的是2.5.2版本。如图2-2-2-1所示,我使用的是阿里云的OSS作为图床,填入相关配置后,保存即可。关于 (4)、在 Obsidian 中实现“复制粘贴,自动上传并返回图床链接”的丝滑体验。这一步可以实现在Obsidian笔记中直接粘贴图片(配合Snipaste截图软件更方便,F1直接截图,Ctrl + V直接复制),自动将图片传到图床,并返回图床的链接。在Obsidian中下载一个叫“Image auto upload”的第三方插件,启用插件后,进入插件设置,设置PicGOServer 上传接口:http://127.0.0.1:36677/upload,一般默认就是这个值,端口号和PicGo中设置的保持一致,如下图所示。 3. 云端托管与版本控制 (Obsidian Git) 安装与配置 Obsidian Git 插件。 (1)、即使不准备搭建个人博客,只要你有记录笔记的习惯,这一部分对你也有很多帮助。Obsidian自带有云端同步功能,而且是端到端加密的,但是需要付费。另一个方案就是将Obsidian仓库上传到Github,这样可以实现在不同的工作地点对同一篇笔记进行无缝编辑。 (2)、首先创建一个Github仓库,然后将仓库克隆到本地,这一步可以参考笔记“Github配合Sourcetree管理UE4工程”(牵扯到SSH密钥)。在Obsidian中点击仓库管理,选择打开本地仓库,将刚才克隆的本地到仓库作为Obsidian的工作空间。在.gitignore文件中可以设置忽略的文件。 (3)、在Obsidian中下载Git第三方插件,启用后会在右侧出现Git操作面板,如图所示。常用的流程如下,当修改文件后,点击加号(Stage All)暂存所有,然后在输入框(默认Update Bolg:)输入当前修改的内容,接着点击对号(Commit)提交,最后点击上传按钮(push)推送到GitHub仓库。如果是比较小的修改,可以直接点击第一个向上的箭头(Commit-And-Sync)一键提交和推送。 总结 到这里已经实现了Obsidian + Picgo + Github的笔记托管方案。如果不考虑创建个人博客的话,这套流程用来写笔记也是非常舒服的,数据同步,免费托管,图文分离。...

四月 23, 2026 · Imrcao

使用UE挂载Pak时遇到的一个问题

问题 用PakTools插件打包出来的pak文件,打包运行挂载pak文件后(使用PakLoader插件加载),有的pak文件系统无法加载指定路径的资产。 原因分析: 使用cmd命令查看pak文件,得到如下输出: 1 2 3 4 5 6 cmd:UnrealPak.exe F:\00_Imrcao\01_MyProject\PreviewTools\Saved\DownloadedPaks\Models\chair_P.pak -List Mount point ../../../PreviewTool/ LogPakFile: Display: "AssetRegistry.bin" offset: 0, size: 3948 bytes, LogPakFile: Display: "Content/Assets/Materials/Models/Fabric_3.uasset" LogPakFile: Display: "Content/Assets/Materials/Models/Fabric_3.uexp" LogPakFile: Display: "Content/Assets/Materials/Models/Metal_2.uasset" 1 2 3 4 5 6 7 cmd:UnrealPak.exe F:\00_Imrcao\01_MyProject\PreviewTools\Saved\DownloadedPaks\Models\Bed_P.pak -List Mount point ../../../ PreviewTool/Content/Assets/Texture/UMG/Thumbnails/Models/Bed.ubulk" LogPakFile: Display: "PreviewTool/Content/Assets/Texture/UMG/Thumbnails/Models/Bed.uexp" LogPakFile: Display: "PreviewTool/Content/Blueprints/Sku/Models/Bed.uasset" LogPakFile: Display: "PreviewTool/Content/Blueprints/Sku/Models/Bed.uexp" 可以发现两个pak文件的mountPoint不一样,默认mountPoint系统自己计算,但也可以自己设置。那么mountPoint不一致会有什么问题呢?先看我的挂载代码。 1 UPakLoaderLibrary::MountPakFile(PakPaths, "") 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 //挂载pak UPakLoaderLibrary::MountPakFile(PakPaths, "") //注册挂载点,这个是核心 UPakLoaderLibrary::RegisterMountPoint("/PTPakDLC/", "....

四月 20, 2026 · Imrcao

Ctrl + Z撤销功能实现思路

一、基本思路 操作封装。将每一个可撤销的用户行为,抽象为一个"命令对象"(IUndoableCommand),该对象下有两个方法:Do()、Undo(); 使用 TArray 存储最近的 5 步操作。创建撤销栈,先进后出。 创建撤销管理器:FUndoManager,管理"命令对象"。 绑定 Ctrl + Z。 二、核心类设计 1、抽象命令接口 IUndoableCommand 1 2 3 4 5 6 7 8 9 10 #pragma once #include "CoreMinimal.h" class IUndoableCommand { public: virtual ~IUndoableCommand() {} virtual void Do() = 0; virtual void Undo() = 0; }; 2、创建命令对象,比如平移对象:FTranslateActorCommand。(也可以类似实现:FActorPropertyCommand、FDeleteActorCommand 等操作) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #pragma once #include "CoreMinimal....

二月 3, 2026 · Imrcao

UE4打包IOS详细笔记

前言: 第一次使用UE4打包IOS的话会遇到很多坑,这里记录了各种坑的填补方法。其实打包的方法有很多,需要有一台MAC电脑,如果你习惯在MAC上使用UE4,可以直接在MAC上进行打包。也可以在PC端进行远程连接打包。我这里只记录在PC上进行远程打包。我将这篇笔记分为四部分:MAC上创建证书相关;PC苹果开发者网站中证书及文件操作相关部分;PC主机和MAC机连接部分;UE4配置及打包部分。我测试的环境:一台MAC一体机,一台PC主机,一台IPADPro,使用UE427创建的C++工程,具有苹果开发者账号(不讲账号购买部分)。 一、MAC上创建开发者证书 在MAC上,找到“钥匙串”程序,打开后在电脑的上左上方的菜单栏中找到钥匙串->证书助理->从开发机构申请颁布证书。打开后输入邮箱和名称,在下方勾选“存储到磁盘”和“让我指定密钥对信息”,如图1-1所示。点击“继续”选择存储位置,在“密钥对信息”页面使用默认值就行,点击“继续”会创建一个后缀为“.certSigningRequest”的证书,如图1-2所示。证书创建好后拷贝到PC主机上(因为苹果开发者账号是从PC主机上登录的),在MAC上登录就不用拷贝了。 图1-1 图1-2 二、登录苹果开发者账号 1、进入网站“https://idmsa.apple.com/”。登录进去后首先开始创建证书,如图2-1-1所示。我这里选择“IOS App Developmant”,如图2-2-2所示。下一步选择从MAC上创建的后缀为“.certSigningRequest”的开发者证书,如图2-2-3所示。下一步点击“Download”将配置好的证书下载到本地,如图2-4所示。最终会得到一个“.cer”格式的文件。 图2-1-1 图2-1-2 图2-1-3 图2-1-4 2、第二步添加身份标识,创建AppID。如图2-2-1所示。选择App IDs,如图2-2-2所示,下一步选择“APP”,点击继续,如图2-2-3所示。首先填写描述,根据项目填写就行,接着填写“BundleID”,根据提示填写,我这里写的是“com.imrcao.ledv3.app”,要将BundleID记住,后面要在UE4的项目设置中用的。如图2-2-4所示。点击继续后就可以点击注册了,如图2-2-5所示。 图2-2-1 图2-2-2 图2-2-3 图2-2-4 图2-2-5 3、接着要添加设备,这里要获取IPAD的UDID,获取方法可以在网上搜一下,可以使用“蒲公英”,也可以使用爱思助手(个人比较推荐这个),使用爱思助手还可以安装自己的IPA程序。点击添加按钮,如图2-3-1所示。输入名字和UDID后点击继续即可,如图2-3-2所示。 图2-3-1 图2-3-2 4、第四步创建配置文件,这个文件是要在UE4中使用的。点击添加按钮,如图2-4-1所示。在新的一页选择“ios App Developmant”,点击继续如图2-4-2所示。选择第二步创建的AppID,点击继续,如图2-4-3所示。接着选择第一步创建的证书,如图2-4-4所示。点击继续后选择第三步创建的设备ID,如图2-4-5所示。最后预览信息无误后点击生成按钮,生成配置文件。如图2-4-6所示。配置好后回到“Profiles”列表,点击“Download”下载配置文件,会得到一个后缀为“.mobileprovision”文件。这个文件后面会直接导入UE4项目设置中使用。 图2-4-1 图2-4-2 图2-4-3 图2-4-4 图2-4-5 图2-4-6 三、MAC上认证“.cer”安全证书 1、第二部分完成后PC本地应该有后缀分别为“.cer”和“.mobileprovision”两个文件,如图3-1-1所示。接下来要将“.cer”文件拷贝到MAC上,认证证书,然后生成".p12"信息交换文件。 图3-1-1 2、在MAC上双击“.cer”文件,在钥匙串的登录页就可以看到证书,注意在窗口上方一栏中会显示“此证书有效”的图标,如图3-2-1所示。如果证书是无效的话,应该是缺少两个系统证书,如图3-2-2所示,一个23年过期,一个30年过期。在证书有效的情况下对刚才导入的".cer"文件单击右键选择导出(注意不是在“专用密钥”那一栏单击,在这里单击导出我没有试过)。在弹出的窗口点击“存储”,如图3-2-3所示。然后输入密码即可。这时会生成一个".p12"文件。将这个文件传输到PC上,后面在UE4项目设置中直接导入。 图3-2-1 图3-2-2 图3-2-3 3、在PC上最终我们会使用这个两个文件,分别是后缀“.mobileprovision”和“.p12”文件。如图3-3-1所示。 图3-3-1 四、连接PC主机和MAC 1、如果你创建的是UE4的C++工程,那么打包IOS时就需要使用XCode编译,由于我们是在PC上打包,PC上是没有XCode的,所以要连接MAC机。使用无线和有线连接都可以,最终要使两台机器处于同一个局域网内,且可以“Ping”通。连接好后,在MAC上打开“共享”窗口,勾选“远程登录”,选择“所有用户”。如图4-1-1所示。 图4-1-1 2、查看MAC的用户名:在MAC中找到“终端”程序,终端窗口上面的名字就是用户名,这个在UE4项目设置中会用到。如图4-2-1所示。 图4-2-1 五、在PC上使用UE4打包。 1、在UE4工程的项目设置中找到“Platforms->iOS”,点击“Import Provision”选择后缀“.mobileprovision”文件并导入,点击“Import Certificate”选择后缀“.p12”文件,输入密码后导入。在“Status”下显示“Valid”说明证书有效。有时候证书和密钥很多,如果前面的复选框都不勾选的话就使用默认的移动证书和密钥,勾选的话就使用指定证书和密钥。如图5-1-1所示。 2、在下方的“Bundle Information”一栏需要填写证书相关的信息,这里就会用到在开发者网站中创建AppID时填写的Bundle ID。Bundle Display Name是APP的显示名称,可以随便填写。Bundle Name也可以自己填写。Bundle Identifier一栏填写在开发者网站中创建AppID时填写的Bundle ID。如图5-1-1所示。 图5-1-1 3、接着要生成SSH Key,在项目设置“Platforms - ios-Build”下,展开“Remote Build Options”。 Remote Server Name 填写Mac的IP地址,RSync User Name 填写MAC的用户名(可以使用终端程序查看),接着就可以点击“Generate SSH Key”按钮了。 接下来会弹出一个命令行窗口。 (1)、首先随便按一个键继续; (2)、接下来会提示你输入MAC用户对应的登录密码,输入后按回车(这里输入是不可见的,盲打就行); (3)、Enter same passphrase again:什么都不要输入,直接回车; (5)、接着会出来一堆代码,不要管直接按回车继续; (6)、接着再次输入MAC用户的登录密码,回车继续; 如果没有提示什么错误的话,说明Remote Build就设置成功过了,过一会SSH Key文件就生成在本地了。如图5-3-1所示。...

九月 3, 2025 · Imrcao

C++编程-禁用优化

在 C++ 编程中,#pragma optimize("", off) 和 #pragma optimize("", on) 是用于控制特定代码段的编译器优化设置的预处理指令。这些指令可以帮助在调试特定代码段时禁用优化,以便更容易地跟踪和调试问题。 在 Unreal Engine 4 的开发中,可以使用这些指令来确保某些代码段在编译时不被优化,通常用于调试复杂逻辑或在执行关键任务时确保代码的行为与预期一致。

五月 3, 2025 · Imrcao