8个版本 (有破坏性)
0.7.0 | 2024年7月8日 |
---|---|
0.6.0 | 2024年5月7日 |
0.5.0 | 2024年4月4日 |
0.4.0 | 2024年4月2日 |
0.1.0 | 2023年11月13日 |
#2150 in 游戏开发
每月327次下载
55KB
600 行
Tnua - Bevy的字符控制器。
Tnua(希伯来语中的“运动”)是一个浮动物理控制器,这意味着角色不再不断接触地面,而是漂浮在其上方,这使得运动控制变得更加简单。
Tnua可以使用Rapier或Avian(以前称为XPBD),并且通过集成库支持两者的2D和3D版本
- 对于Rapier 2D,请添加bevy-tnua-rapier2d包。
- 对于Rapier 3D,请添加bevy-tnua-rapier3d包。
- 对于Avian 2D,请添加bevy-tnua-avian2d包。
- 对于Avian 3D,请添加bevy-tnua-avian3d包。
- XPBD仍然通过bevy-tnua-xpbd2d和bevy-tnua-xpbd3d支持,但鼓励用户迁移到Avian
- 第三方集成包。此类包应依赖于bevy-tnua-physics-integration-layer而不是主bevy-tnua包。
注意:
- 需要集成包(
bevy-tnua<physics-backend>
)和主bevy-tnua
包,并且应该添加两个包中的主插件。 - 如果您使用双精度物理后端(如带有
f64
标志的Avian),则需要将f64
标志添加到所有Tnua包中。这适用于由物理后端定义的双精度数据 - Bevy本身仍然使用单精度,这将使用该精度来处理位置和旋转。
功能
- 支持Rapier和Avian的2D和3D版本
- 运行
- 跳跃
- 蹲下
- 可变高度跳跃
- 狐狸时间
- 跳跃缓冲区
- 上下坡/楼梯跑动
- 倾斜校正
- 移动平台
- 旋转平台
- 动画助手(不是动画本身,但Tnua提供了帮助决定播放哪个动画的功能)
- 通过平台跳跃/下落
- 空中动作
演示
- 2D 平台游戏: Rapier,鸟类,鸟类(f64 版本)
- 3D 平台游戏: Rapier,鸟类,鸟类(f64 版本)
- 3D 射击游戏: Rapier,鸟类,鸟类(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
、avian2d 或
avian3d
。确保后端(2D或3D)的维度与演示相匹配。例如,要使用Avian运行3D平台游戏,请使用此
$ cargo run --bin platformer_3d --features avian3d
演示代码中的有趣部分
版本
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.14 | 0.4 | 0.7 | 0.27 |
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 |
Avian集成
bevy | bevy-tnua-physics-integration-layer | bevy-tnua-avian | avian |
---|---|---|---|
0.14 | 0.4 | 0.1 | 0.1 |
XPBD集成
由于bevy_xpbd项目已重新命名为"Avian",因此将不再接收任何更新。
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 - 这个mod的原型,也是我从哪里获得浮动的胶囊视频的地方。我最终创建了自己的插件,因为bevy_mod_wanderlust不支持2D。
- Rapier本身有一个角色控制器。它不是一个浮动的角色控制器,但它与物理引擎本身集成,并利用这一优势来解决一些浮动模型试图解决的问题。
许可证
根据您的选择,许可方式为以下之一
- Apache License,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义的,您有意提交给作品中的任何贡献,都将根据上述条款双许可,不附加任何额外的条款或条件。
依赖关系
~39–76MB
~1.5M SLoC