6个版本 (破坏性更新)
0.5.0 | 2024年7月5日 |
---|---|
0.4.0 | 2024年4月4日 |
0.3.0 | 2024年4月2日 |
0.2.0 | 2024年2月24日 |
0.1.0 | 2023年11月13日 |
#8 in #locomotion
53KB
585 行
Tnua - Bevy的字符控制器。
Tnua(希伯来语中的“运动”)是一个浮动的字符控制器,这意味着角色不是不断接触地面,而是悬浮在地面之上,这使得运动控制中的许多方面变得更加简单。
Tnua可以使用Rapier或XPBD,并且通过集成包支持两者的2D和3D版本
- 对于Rapier 2D,添加bevy-tnua-rapier2d包。
- 对于Rapier 3D,添加bevy-tnua-rapier3d包。
- 对于XPBD 2D,添加bevy-tnua-xpbd2d包。
- 对于XPBD 3D,添加bevy-tnua-xpbd3d包。
- 第三方集成包。这些包应依赖于bevy-tnua-physics-integration-layer而不是主要的bevy-tnua包。
注意
- 需要集成包(
bevy-tnua<physics-backend>
)和主bevy-tnua
包,并且应添加两个包中的主插件。 - 如果你使用具有双精度(如带有
f64
标志的XPBD)的物理后端,你需要将f64
标志添加到所有Tnua包中。这适用于由物理后端定义的双精度数据——Bevy本身仍将使用单精度,并且这是位置和旋转将使用的精度。
功能
- 支持Rapier和XPBD的2D和3D版本
- 运行
- 跳跃
- 蹲下
- 可变高度跳跃
- 狐狸时间
- 跳跃缓冲
- 上坡/下坡/楼梯跑
- 倾斜校正
- 移动平台
- 旋转平台
- 动画助手(不是动画本身,但Tnua有决定播放哪个动画的辅助工具)
- 跳过/穿过平台掉落
- 空中动作
演示
- 2D 平台游戏:Rapier,XPBD,XPBD(f64 版本)
- 3D 平台游戏:Rapier,XPBD,XPBD(f64 版本)
- 3D 射击游戏:Rapier,XPBD,XPBD(f64 版本)
演示中的基础和动作可以通过 GUI 调整。它们被初始化为 Tnua 提供的 Default::default()
,以下是一些例外
TnuaBuiltinWalk::desired_velocity
默认为零向量,但用户移动角色时,它被设置为长度为 20.0 的向量(2D 演示中为 40.0)TnuaBuiltinWalk::float_height
被设置为 2.0,尽管它默认为 0.0。用户代码应始终根据模型几何设置浮点高度。TnuaBuiltinWalk::max_slope
被设置为 $\frac{\pi}{4}$,尽管它默认为 $\frac{\pi}{2}$(这会禁用滑动行为,因为这是墙壁的斜率角度)TnuaBuiltinJump::height
被设置为 4.0,尽管它默认为 0.0。用户代码应始终根据游戏需求设置跳跃高度(零高度跳跃动作是无用的)TnuaBuiltinCrouch::float_offset
被设置为 -0.9,尽管它默认为 0.0。就像float_height
一样,这个值应由用户代码根据模型几何设置。TnuaBuiltinDash::displacement
默认为 0.0,但用户输入冲刺命令时,它被设置为长度为 10.0 的向量。
本地运行演示
$ cargo run --bin <demo-name> --features <physics-backend>
其中 <demo-name>
是演示名称,<physics-backend>
是 rapier2d
,rapier3d
,xpbd2d 或
xpbd3d
。请确保后端(2D 或 3D)与演示的维度匹配。例如,要使用 XPBD 运行 3D 平台游戏,请使用此
$ cargo run --bin platformer_3d --features xpbd3d
演示代码的有趣部分
版本
Tnua 被分割成不同的 crate,分别更新,因此被分割成多个表格。bevy-tnua-physics-integration-layer 的版本必须与主 bevy-tnua crate 和集成 crate 相同。
主要
bevy | bevy-tnua-physics-integration-layer | bevy-tnua |
---|---|---|
0.14 | 0.4 | 0.19 |
0.13 | 0.3 | 0.16-0.18 |
0.13 | 0.2 | 0.15 |
0.12 | 0.1 | 0.13-0.14 |
Rapier 集成
bevy | bevy-tnua-physics-integration-layer | bevy-tnua-rapier | bevy_rapier |
---|---|---|---|
0.13 | 0.3 | 0.6 | 0.26 |
0.13 | 0.3 | 0.4, 0.5 | 0.25 |
0.13 | 0.2 | 0.3 | 0.25 |
0.12 | 0.1 | 0.2 | 0.24 |
0.12 | 0.1 | 0.1 | 0.23 |
XPBD 集成
bevy | bevy-tnua-physics-integration-layer | bevy-tnua-xpbd | bevy_xpbd |
---|---|---|---|
0.14 | 0.4 | 0.5 | 0.5 |
0.13 | 0.3 | 0.3, 0.4 | 0.4 |
0.13 | 0.2 | 0.2 | 0.4 |
0.12 | 0.1 | 0.1 | 0.3 |
预分割
bevy | bevy-tnua | bevy_rapier |
---|---|---|
0.12 | 0.12 | 0.23 |
0.11 | 0.8 - 0.11 | 0.22 |
0.10 | 0.1 - 0.7 | 0.21 |
参考材料
以下内容用于编码Tnua的数学和物理
- "悬浮胶囊"和运行机制
- 跳跃机制
替代方案
- bevy_mod_wanderlust - 本模组的原始灵感来源,我从中获得了悬浮胶囊的视频。由于bevy_mod_wanderlust不支持2D,我最终创建了自家的插件。
- Rapier本身有一个角色控制器。它不是一个悬浮角色控制器,但它与物理引擎本身集成,并利用这一优势来解决悬浮模型所解决的一些问题。
许可
以下任一许可
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选择。
贡献
除非您明确表示,否则根据Apache-2.0许可定义,您提交的任何有意包含在作品中的贡献,应如上所述双重许可,无任何额外条款或条件。
依赖项
~44–81MB
~1.5M SLoC