LOADING

加载过慢请开启缓存 浏览器默认开启

千幻笙的小窝

欢迎来到我的小站

公告 2050/3/14

因为喜欢,所以我为之痴迷。
额,其实还没想好写些什么。
这个小站主要用途是让我的总结、笔记之类的能够多端协同以及便于分享给我的朋友。可能后续会加上杂谈、文章之类的吧,但目前没什么想法。
往后打算开始随缘更新博客。
2025.09.24 感觉博客有点空荡荡的,从现在开始不断输出内容。先从每日一题和每周周记,复习和学习到什么板块就输出什么板块的内容

阅读全文

AI 驱动游戏玩法:别把大模型直接塞进游戏回路

游戏开发 2026/8/12

前言

现在一提”AI 驱动游戏玩法”,外面有两种典型想象。一种是”把大模型塞进 NPC,让它自己跟玩家聊,越自治越牛”;另一种是”AI 队友全自动打,解放双手”。这两种想象,行业里已经不少团队真去试过、然后踩了坑。

我翻过一批这方面的研究和已经上线的案例——Generative Agents、Voyager、CICERO、SIMA,到 NVIDIA ACE、和平精英的”小田”这种跑在玩家面前的产品。结论和上面两种想象都相反:最有效的系统,恰恰是把”让 AI 自由发挥”这件事收窄到最小。这篇文章不教你搭整套框架,先把那条不能碰的红线说清楚。

这篇文章写给想搞清楚”AI 玩法到底怎么落地”的开发者:不要求你懂大模型原理,但假设你至少知道 NPC、游戏状态这些基本概念。它偏架构和取舍,不手把手教你一行行搭。

阅读全文

DrawCall 与 SRP Batcher:为什么你的游戏没多少东西却很卡

游戏开发 2026/8/11

前言

“卡顿?那肯定是 DrawCall 太多,合批一下就好了。”——这句话我在无数教程评论区和面试复盘里见过,但它坑了不少人。顺着这句话往下,还衍生出两个常见的”常识”:一是”用了对象池,DrawCall 自然就降了”;二是”我 SRP Batcher 明明开了,没半点效果,Unity 这破引擎垃圾”。

这三句话,每句都只说对了一半,而且错的那一半正好挡在真正动手之前。这篇文章不罗列概念,我想把这三句话逐个拆穿,重点放在工程上真正卡人的地方:状态切换为什么贵、SRP Batcher 凭什么能跳过它、以及那个”开了等于没开”的现场长什么样。

下面的内容来自我自己整理的原理笔记,加上一份公开场景的实测数据做量化参考,偏原理和取舍,不绑定你某个项目的落地数字——你项目的具体瓶颈,得自己用 Profiler 量。

阅读全文

Unity 对象池的设计与实现:以弹幕游戏的子弹管理为例

2026/8/10

游戏里每颗子弹、每个粒子、每次特效,背后都是一次创建和销毁。当同屏上千个对象在飞,这种频繁分配会直接拖垮帧率。对象池(Object Pool)就是为解决这个问题而生的设计模式——预先创建一批对象放在一边,需要的时候借出来,用完再还回去,而不是每次都新建、销毁。
这篇文章以我做过的一个弹幕游戏《车万空寂花》为例,把对象池这项技术从原理到完整实现拆开讲。

阅读全文

Unity 热更新技术解析:ILRuntime、xLua 与 Puerts

前言

热更新这个词在 Unity 圈被聊得很乱。很多人聊到它,只会甩出”用 xLua”或者”用 ILRuntime”这样的名字,但说不清这些方案到底在解决什么问题,更分不清哪些是资源的事、哪些是代码的事。
我先把这件事拆开:Unity 热更新本质上要绕过两道墙——IL2CPP / AOT 环境下不能 JIT,以及平台商店审核周期太长。但”热更新”四个字底下其实藏着两条完全不同的技术线。这篇文章想把这两条线讲清楚,重点放在工程上真正卡人的地方——引用计数、依赖去重、跨语言调用开销,还有那两套互相拖累的 GC。这几个名词先记下,文章后面会逐个拆开讲,现在不用纠结。
下面的内容主要来自我自己整理的原理笔记,偏原理和取舍,不绑定某个具体项目的落地数据。

阅读全文

MetroidvaniaLike 系列三:敌人 AI、属性与技能系统如何解耦

前言

前两篇整理的是玩家状态和跳跃手感。这部分继续看战斗相关内容:敌人怎样切换状态、属性怎样计算、Buff 放在哪里,以及技能冷却和旧技能树目前是什么情况。
MetroidvaniaLike 目前用 Entity 提供共同能力,Player 和 Enemy 再各自处理输入或 AI。重新检查代码时也发现,旧技能树已经标记为废弃,这里会按现状写清楚。
项目源码:qian488/MetroidvaniaLike

阅读全文

MetroidvaniaLike 系列二:土狼时间、输入缓冲与动作打断

项目复盘 2026/7/26

前言

做横版角色跳跃时,最直接的判断是“这一帧按下跳跃,并且角色在地面”。实际玩起来会出现一个问题:刚离开平台才按键,或者落地前一点按键,系统都不会起跳。
MetroidvaniaLike 里给这两种情况分别加了土狼时间和 Jump Buffer。它们本身只有几个计时器,麻烦的地方主要在消费时机,以及怎样和二段跳、墙滑、冲刺等状态一起工作。
这篇记录目前的实现思路和后续还需要补的状态优先级。
项目源码:qian488/MetroidvaniaLike

阅读全文

MetroidvaniaLike 系列一:用类状态机组织 Unity 动作角色

项目复盘 2026/7/21

前言

MetroidvaniaLike 是我用 Unity 6 做的一个 2D 横版动作 RPG 练习项目。玩家从最初的移动和跳跃,慢慢加到了二段跳、墙滑、蹬墙跳、冲刺、攻击、受伤和死亡。动作多起来以后,Player.Update() 里同时处理输入、动画和速度会越来越乱,于是项目给每个动作单独写了状态类。
这篇先记录状态机目前的结构,以及我重新检查代码时发现的切换约束问题。
项目源码:qian488/MetroidvaniaLike

阅读全文

车万空寂花系列三:时间轴关卡、资源预热与加载流程

项目复盘 2026/7/16

前言

弹幕本身做出来以后,还要把敌人、波次和 Boss 排成一关。车万空寂花现在用 StageData 保存任务数据,再由 StageRunner 按时间触发。进入关卡前还会加载资源、建立子弹贴图索引并预热对象池。
这一篇主要记录这两个部分是怎么接起来的,以及目前 Resources 方案还留下了哪些问题。
源码入口:qian488/Danmaku

阅读全文

车万空寂花系列二:集中更新、对象池与弹幕碰撞

项目复盘 2026/7/12

前言

车万空寂花里的敌弹数量比较多,每颗子弹还要处理移动、碰撞、越界和擦弹。如果全部各写各的,清屏、暂停和回收都会比较麻烦。目前项目把敌弹统一交给 BulletManager 管理,再配合对象池复用 GameObject。
这篇把这条链路单独拆出来,顺便记录几个容易出问题的地方。公开仓库目前没有完整的 Profiler 对照数据,所以性能部分只写已经实现的结构和后续验证方法。
源码入口:qian488/Danmaku

阅读全文

车万空寂花系列一:从可玩成品倒推 Unity 弹幕游戏架构

前言

“车万空寂花”最开始只是想做一个仿东方 Project 的弹幕游戏。项目往后做,角色与难度选择、完整关卡、Boss、分数记录、PC 和移动端控制都加了进来,原本单独运行的弹幕代码也要和关卡、输入、资源、UI 接起来。
最近正好在整理这个项目的资料,于是先把目前已经跑通的流程写下来。本文主要看整体结构,后面两篇再分别展开弹幕管理和关卡加载。
项目源码:qian488/Danmaku;试玩页面:itch.io

阅读全文

为什么免费游戏能赚钱:F2P 背后的经济学机制

分享 2026/7/3

前言

最近整理经济学笔记时,我专门补了一部分游戏经济学。这里面有个看起来很基础的问题:免费游戏连门票都不收,到底靠什么赚钱?
以前我对这件事的理解很简单,无非就是月卡、抽卡、皮肤和各种礼包。继续往下整理才发现,这些只是收费入口。F2P 能够运转,前面还要有玩家规模、留存、资源循环和长期内容更新。
这篇文章记录一下我目前对免费游戏商业模式的理解。本人并非游戏策划,部分内容来自经济学笔记以及自己的游戏体验,先当作一个分析框架使用。

阅读全文

把 AI 当成低维护信息处理器:从资料到输出的知识库工作流

方法论 2026/6/28

前言

我这个 Obsidian 库已经用了挺长时间。最开始的想法很简单:学习资料、项目记录、面试题和临时想法都放进来,以后需要的时候就能找到。
实际用起来就没这么顺利了。文件越来越多以后,我开始折腾目录、模板、状态字段、审核区和各种索引。每次整理完看起来都挺完整,过一段时间又会积累一批没处理的内容。知识还没学多少,管理知识的方法倒是越来越复杂。
后来我开始让 AI 接手整理工作,也踩了新的坑:它很喜欢生成结构完整的长文。标题、总结、表格一应俱全,但内容未必是我真正理解的,写作语气有时也完全不像我。
所以这篇文章想记录一下,我现在具体怎么让 AI 帮忙维护这个库,以及哪些事情仍然需要自己判断。

阅读全文

每日一题-数组的三角和

每日一题 2025/9/30

【题目指路】每日一题-数组的三角和
给你一个下标从 0 开始的整数数组 nums ,其中 nums[i]09 之间(两者都包含)的一个数字。
nums三角和 是执行以下操作以后最后剩下元素的值:

  1. nums 初始包含 n 个元素。如果 n == 1终止 操作。否则,创建 一个新的下标从 0 开始的长度为 n - 1 的整数数组 newNums
  2. 对于满足 0 <= i < n - 1 的下标 inewNums[i] 赋值(nums[i] + nums[i+1]) % 10% 表示取余运算。
  3. newNums 替换 数组 nums
  4. 从步骤 1 开始 重复 整个过程。
    请你返回 nums 的三角和。
阅读全文

每日一题:多边形三角剖分的最低得分

每日一题 2025/9/29

【题目指路】每日一题:多边形三角剖分的最低得分
你有一个凸的 n 边形,其每个顶点都有一个整数值。给定一个整数数组 values ,其中 values[i] 是第 i 个顶点的值(即 顺时针顺序 )。
假设将多边形 剖分n - 2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 n - 2 个三角形的值之和。
返回 多边形进行三角剖分后可以得到的最低分

阅读全文

每日一题:三角形的最大周长

每日一题 2025/9/28

【题目指路】每日一题:三角形的最大周长
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0

阅读全文

每日一题:最大三角形面积

每日一题 2025/9/27

【题目指路】每日一题:最大三角形面积
给你一个由 X-Y 平面上的点组成的数组 points ,其中 points[i] = [xi, yi] 。从其中取任意三个不同的点组成三角形,返回能组成的最大三角形的面积。与真实值误差在 10^-5 内的答案将会视为正确答案

阅读全文

每日一题:有效三角形的个数

每日一题 2025/9/26

【题目指路】每日一题:有效三角形的个数
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

阅读全文

每日一题:三角形最小路径和

每日一题 2025/9/25

【题目指路】每日一题:三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 ii + 1

阅读全文

每日一题:分数到小数

每日一题 2025/9/24

【题目指路】每日一题:分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个
对于所有给定的输入,保证 答案字符串的长度小于 $10^{4}$ 。

阅读全文
1 2 3
avatar
Awith

平平无奇大三学生,喜欢二次元