主页

Python In Unreal

Unreal 锦囊 少见的接口 // 排序 // 假如有一个列表 TArray<FItem> ItemList; Algo::SortBy(EntryList, &FItem::ID); Algo::SortBy(EntryList, &FItem::SomeField, TGreater<>()); Python 问题: 如何在 ue 使用 asyncio 解决: 正常地使用 asyncio loop 会卡住 ue 主线程,需要使用ue本身的tick def update(delta_seconds): try: loop = asyncio.get_event_loo...

阅读更多

git/svn 锦囊

git/svn 锦囊 git 查看日志 # 显示 b1 分支上没有合并到 master 的提交 git log master..b1 # 显示从 c869c18cd 到 HEAD 之间的提交 git log c869c18cd..HEAD # 查看某段时间的日志 + 特定格式 # https://git-scm.com/docs/git-log, format:<format-string> git log --since='2022-02-15' --pretty=format:'%s' # 列出某次提交中某个文件的修改 git show commit-id file-path # blame git blame <filename> -L <...

阅读更多

用 Unity 实现 3D 文字游戏

用 Unity 实现 3D 文字游戏 关于《文字游戏》 《文字游戏》是一款由台湾游戏团队Team9所开发的角色扮演解谜类文字游戏,已于2022年1月21日推出Microsoft Windows及Mac OS X完整版本。 在游戏设定中,世界是由汉字构成,而“字”除了是故事叙述与界面的载体,同时也是故事内的物件、人物和场景。参考像素、ASCII艺术风格,以方块字作为棋盘式地图上的点阵单位,玩家将操控“我”,从叙述与物件的谜题中找出线索,通过删减、搬移、拆解、组合改变句义、主导剧情。 (图1) 除了2D部分,游戏中还有3D部分: (图2) 视频如下 https://www.bilibili.com/video/BV1dK411G7aQ/ 重点是 18”、29”、1’22” 三处 ...

阅读更多

随机选取链表元素

#随机选取链表元素 问题1: 有一个长度未知但有限的链表K={k1, k2, k3…},现在需要从链表中选取一个元素,使得 K 中每一个元素被选中的概率都相等。 解决1: 从前到后遍历链表。设当前元素为 kn,则从[0,n-1] 中随机一个整数 r,如果 r==0 则令 kn 为选中值。等链表遍历过一次之后,将选中值返回。时间复杂度为O(n)。 ret = k.first crnt_node = k.first count = 1 while crnt_node.next != None: # 这里把整数变成了等价的连续区间概率 if rand() < 1 / count: ret = crnt_node crnt_node = crn...

阅读更多

生成迷宫

生成迷宫 基本的深度优先搜索算法:方格迷宫 (图1) 假如给定这样一个迷宫,起点是左下角,终点是右上角,容易想到使用深度优先搜索寻找路线。 同样的道理,对于一个未初始化的迷宫,也可以使用深度优先搜索生成路线。整个过程是等用于把图展开成树的过程。 这里假设有一个链表 path,类型是 point,初始状态只包括起点一个元素。 Step 方法负责进行一小步深度搜索。每次从链表的尾部取出一个节点,以随机方向访问它的邻居,如果这个节点有未搜索过的邻居,则把邻居标记为已搜索、压入链表并返回。如果所有邻居都已经搜索过,则把尾节点从链表中弹出。 一直循环 Step 方法直到 path 为空,即生成了一个迷宫。 public bool Step() { if (...

阅读更多

DualKeyDictionary

C# 代码规范 大小写 名字空间、类名、属性字段、方法、枚举用Pascal(大驼峰)式 文件夹名字用Pascal式。尽量做到每个文件代表一个类/枚举/接口,或者至少是围绕一个核心组织的一组类/枚举/接口,文件名字和核心一致。 字段名用小驼峰式,私有成员不需要加 _ 或者 m_(不要匈牙利命名法) 常量用全大写加下划线如 const int BOOK_MAX_COUNT = 5,包括 const 和 readonly 少于等于两个字母的缩写词全大写,如 System.IO。多于两个字母的缩写词使用驼峰式,如HtmlReader。 空行和空格 类(接口、枚举)与类(接口、枚举)之间空两行 类内的方法、属性前后空一行 函数内的逻辑段之间(逻辑段过长的...

阅读更多

DualKeyDictionary

DualKeyDictionary 双键字典,我们的目标是 public class DualKeyDictionary<TK1, TK2, TV> dict; dict.Set(k1, k2, $"{k1}.{k2}"); dict.Get(k1, k2); foreach (var pair in dict){ // pair.key1, pair.key2, pair.value } foreach(var pair in dict.GetCollectionByKey1(k1)){ } foreach(var pair in dict.GetCollectionByKey2(k2)){ } 单键字典的实现 (图缺) 扩展到双键字...

阅读更多

《游戏引擎架构2》 10 渲染引擎

10.1 光栅化基础 渲染步骤:一个场景、一个摄像机、一个光源,物体表面的视觉特性、求解渲染方程 10.1.1 场景 面片、样条、三角形、镶嵌、三角化 LOD、动态镶嵌、渐进网格 三角形 法线:任意两条棱的叉积,归一化之后的向量 缠绕顺序、背面剔除 三角形表、索引化三角形表、顶点缓冲/顶点数组、索引缓冲/索引数组 三角形带/三角形扇:一种顶点数组 空间 模型空间、世界空间 世界矩阵M = [(i,0), (j, 0), (k,0), (t,1)],其中ijk是以世界空间表示的模型空间基向量,t是模型空间轴在世界空间的平移 或者 M = [(RS, 0), (t, 1)] 变换法线时需要乘以M的逆转矩阵 10.1.2 表面的视觉性质 光和颜色:吸收、反射、传播/折射、衍射、干涉、极化...

阅读更多