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日

#2202 in 游戏开发

Download history 76/week @ 2024-04-22 41/week @ 2024-04-29 26/week @ 2024-05-06 37/week @ 2024-05-13 56/week @ 2024-05-20 47/week @ 2024-05-27 79/week @ 2024-06-03 98/week @ 2024-06-10 59/week @ 2024-06-17 106/week @ 2024-06-24 232/week @ 2024-07-01 81/week @ 2024-07-08 41/week @ 2024-07-15 3/week @ 2024-07-22 84/week @ 2024-07-29 33/week @ 2024-08-05

每月170次下载

MIT/Apache

53KB
592

Build Status Latest Version Rust Documentation Rust Documentation

Tnua - Bevy的字符控制器。

Tnua(希伯来语中的“运动”)是一个浮动物理控制器,这意味着角色不是始终接触地面,而是悬浮在地面之上,这使得许多运动控制方面变得更加简单。

Tnua可以使用RapierXPBD,并且通过集成Crate支持两者的2D和3D版本

注意

  • 集成Crate(代码:bevy-tnua<physics-backend>)和主bevy-tnua Crate都是必需的,并且应该添加两个Crate的主插件。
  • 如果你使用双精度物理后端(如带有f64标志的XPBD),你需要将f64标志添加到所有Tnua Crate中。这适用于由物理后端定义的双精度数据 - Bevy本身仍然使用单精度,这是位置和旋转将使用的精度。

特性

  • 支持Rapier和XPBD的2D和3D版本
  • 运行
  • 跳跃
  • 蹲下
  • 可变高度的跳跃
  • Coyote时间
  • 跳跃缓冲
  • 上坡/下坡/楼梯的上下行
  • 倾斜校正
  • 移动平台
  • 旋转平台
  • 动画辅助工具(不是动画本身,但Tnua提供了帮助决定播放哪个动画的功能)
  • 跳跃/跌落通过平台
  • 空中动作

演示

演示中的基础和动作可以通过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>rapier2drapier3dxpbd2dxpbd3d 之一。确保后端(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 - 该mod的原型灵感,我从中获取了浮空胶囊视频。由于bevy_mod_wanderlust不支持2D,我最终创建了自定义插件。
  • Rapier自身有一个角色控制器。它不是一个浮空角色控制器,但它与物理引擎本身集成,并利用这个优势来解决浮空模型通常解决的问题。

许可证

根据以下任一许可证授权

任选其一。

贡献

除非您明确声明,否则任何您有意提交以包含在作品中并由Apache-2.0许可证定义的贡献,都将根据上述许可进行双许可,不附加任何额外条款或条件。

依赖项

~44–81MB
~1.5M SLoC