跳到正文
0:00 / 0:00

Personal Digital Space

你好,我是 Virok。这里是我的数字空间。

游戏开发者 / 系统架构爱好者,上海。记录当下,展望未来。

联系方式

Articles
1
Notes
8
Tags
3
Words
1.0w

Featured

精选文章

写给自己看的架构笔记,恰好也能给别人看懂。

5 分钟

固定步长 30Hz:一个让 bug 可复现的决定

为什么选 30Hz 而不是 60Hz,累加器怎么写才不会死亡螺旋,以及插值为什么只能发生在表现层。

AI 摘要

确定游戏逻辑层的固定模拟频率并正确实现:30Hz是在低端机余量与手感之间算出的工程折中点;累加器需钳制deltaTime防死亡螺旋、限制每帧补tick数防卡死;插值只能在渲染层做且绝不能写回Sim,否则确定性破产;输入需按按下沿在tick边界采样。

Projects

正在做的事

都还在进行中,包括这个站点本身。

Way Of The Warrior 3D

进行中

2025年11月 — 至今

Unity 2022.3 的 Roguelike 割草 / Horde-Survival。核心是一套纯 C# 的确定性模拟层:30Hz 固定步长、表现层与逻辑层严格分离、所有战斗可重放。

Unity 2022.3.62f3C#Sim/View 分离确定性模拟事件日志

Notes

最近的笔记

Now

现在在做什么

在做《Way Of The Warrior 3D》—— 一个 Unity 2022.3 的 Roguelike 割草游戏。

UnityC#AstroTypeScript

/now 页面的内容会随进度更新,这里展示的永远是"当下",不是目标。

Now Playing

正在玩

手上在做的项目与在玩的游戏。

Timeline

最近在做的事

项目、文章与关键决策,按时间排。

  1. 思考

    决定把战斗逻辑从 MonoBehaviour 里全抽出来

    M3 收尾时遇到一个概率三十分之一的抖动 bug,根因是 Update 和 FixedUpdate 读了不同的 deltaTime。抽层花了两周。

  2. 文章
    固定步长 30Hz:一个让 bug 可复现的决定

    为什么选 30Hz 而不是 60Hz,累加器怎么写才不会死亡螺旋,以及插值为什么只能发生在表现层。

  3. 学习
    固定步长定为 30Hz

    实测 300 敌人单 tick 成本 9.2ms。30Hz 给到 33ms 预算,留 3.6 倍余量;20Hz 手感开始发钝。

  4. 项目
    Way Of The Warrior 3D

    Unity 2022.3 的 Roguelike 割草 / Horde-Survival。核心是一套纯 C# 的确定性模拟层:30Hz 固定步长、表现层与逻辑层严格分离、所有战斗可重放。