#bevy #gamedev #2d-3d #locomotion #game-controls

bevy-tnua-physics-integration-layer

用于将物理后端与bevy-tnua集成的组件

5个版本 (3个重大更新)

0.4.0 2024年7月5日
0.3.0 2024年4月2日
0.2.0 2024年2月24日
0.1.1 2024年1月13日
0.1.0 2023年11月13日

#1915游戏开发

Download history 50/week @ 2024-04-22 43/week @ 2024-04-29 34/week @ 2024-05-06 70/week @ 2024-05-13 97/week @ 2024-05-20 69/week @ 2024-05-27 115/week @ 2024-06-03 145/week @ 2024-06-10 125/week @ 2024-06-17 156/week @ 2024-06-24 278/week @ 2024-07-01 153/week @ 2024-07-08 226/week @ 2024-07-15 149/week @ 2024-07-22 177/week @ 2024-07-29 205/week @ 2024-08-05

每月下载量772次
用于 7 包

MIT/Apache

29KB
283

Build Status Latest Version Rust Documentation Rust Documentation

Tnua - Bevy的字符控制器。

Tnua(希伯来语中的“运动”)是一种浮动字符控制器,这意味着角色不再始终接触地面,而是在其上方漂浮,这使得许多运动控制方面变得更简单。

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

注意:

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

功能

  • 支持RapierXPBD的2D和3D版本
  • 运行
  • 跳跃
  • 蹲下
  • 可变高度的跳跃
  • 狐狸时间
  • 跳跃缓冲
  • 上/下斜坡/楼梯
  • 倾斜校正
  • 移动平台
  • 旋转平台
  • 动画辅助(不是动画本身,但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许可证定义的任何有意提交的工作,将按上述方式双许可,没有任何附加条款或条件。

依赖项

~23MB
~410K SLoC