Hanabi二次梳理
一年前,hanabi的版本是v0.14,对应的bevy版本是v0.15.3,当时系统梳理了hannabi, 大概是花了几天时间,从源码到例子,还制作了一个视频。
现在是v0.17,对应的bevy版本是v0.17.3。虽然bevy 0.18已经发布了,但其改动较小, 并不会影响hanabi.
过去了一年,我对bevy也更加熟悉了,是时候用新的视角来看待hanabi了。
一年前,hanabi的版本是v0.14,对应的bevy版本是v0.15.3,当时系统梳理了hannabi, 大概是花了几天时间,从源码到例子,还制作了一个视频。
现在是v0.17,对应的bevy版本是v0.17.3。虽然bevy 0.18已经发布了,但其改动较小, 并不会影响hanabi.
过去了一年,我对bevy也更加熟悉了,是时候用新的视角来看待hanabi了。
行为树是AI的一种,适合npc或敌人的简单智能。
这个库非常棒,实现简单高效,符合作者宣传的简单API.
下面都属于枚举,每个枚举值都是一个一条处理分支。
看下面的代码,感受一下神奇的写法。
match分支返回的是bool,这是明确的,但前两条分支并没有返回什么,而是提前结束了函数。
在常见的match写法中,每个分支的返回值都应该保持一致的类型。但这里打破了这个规则。
Bevy官方查找祖先节点的代码。
传送门的目的在传送二字上,位置移动是基本属性。下面讨论一下几种位置移动。
游戏中的“传送门”机制,其本质是空间跳转系统,可能包括视角转换、位置转换、甚至状态同步。 不同类型的游戏中,传送门系统的复杂程度和实现方式差别很大。 以下是业界主流的几种实现方式和思路,按技术复杂度和类型分类讲讲:
代表作:《塞尔达》、《GTA》、《原神》的传送点
实现方法:
player.position = target.position)代表作:《传送门(Portal)》
实现方法:
代表作:《传送门骑士》、《死亡搁浅》、UE大型开放世界
实现方法:
| 引擎 | 支持情况 | 示例/技术栈 |
|---|---|---|
| Unity | ✅ RenderTexture + 相机同步 | 可用开源插件如 Portal Render |
| Unreal Engine | ✅ RenderTarget + SceneCapture | 官方示例项目即含 Portal 示例 |
| Godot | ✅ ViewportTexture + Portal Camera | 有社区插件支持 |
| 自研引擎/Bevy等 ECS | 🟡 需自行处理空间变换与渲染纹理 |
传送体验要顺畅
动力学箱子 + 静态刚体地面.
箱子受重力影响。
游戏角色移动的方案,不管是在独立游戏还是商业大作中,通常都会围绕普通移动(行走、奔跑)、跳跃和冲刺这几个基本能力进行设计。以下是目前行业里主流与较新方案的系统化分析。
本文聚焦于2d top-down游戏。
优点:支持物理交互、坡道、重力,表现真实。
使用方式:
velocity 或 AddForce() 控制移动。AddMovementInput(),底层已包含加速、滑动、楼梯处理等。优点:控制更直接,适合 2D 或无物理需求的游戏。
典型用法:
transform.Translate() 或手动设置 position += speed * deltaTimevelocity.y += jump_force,再交给重力慢慢拉下按下跳跃时开始计时,持续往上推力,松开跳跃按钮时立刻终止上升
一个Plugin提供了一些函数接受用户输入,在首帧之前要统计所有用户输入, 一个简单的方法是在Plugin::finish()做处理。
在生态库中很少见到这种需求,只有在复杂生态库才能看到。
在Plugin构建时添加一个保存数据的资源,在所有插件加载完毕后,读取数据并删掉资源。