Rust 如何在bevy中旋转和移动对象

Rust 如何在bevy中旋转和移动对象,rust,bevy,Rust,Bevy,我想将我的对象旋转一个给定的量,并将其向前平移以创建一个可操纵的坦克 我不知道怎么做,所有的矩阵、向量和四元数都让我很难找到解决方案 这相当于我想做的事情: transform.Rotate0,0,-转动输入*转动速度*时间.deltaTime; transform.position+=transform.forward*驱动*速度*时间.deltaTime; 我以前在Bevy0.2.1中使用过这段代码,但在升级到0.4后它就坏了 *transform.value_mut=*transform.

我想将我的对象旋转一个给定的量,并将其向前平移以创建一个可操纵的坦克

我不知道怎么做,所有的矩阵、向量和四元数都让我很难找到解决方案

这相当于我想做的事情:

transform.Rotate0,0,-转动输入*转动速度*时间.deltaTime; transform.position+=transform.forward*驱动*速度*时间.deltaTime; 我以前在Bevy0.2.1中使用过这段代码,但在升级到0.4后它就坏了

*transform.value_mut=*transform.value *Mat4::从旋转到平移 Quat::从旋转角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度, Vec3::单位y*驱动力*油箱速度*时间。增量秒, ;
我找到了答案,多亏了《不和谐上的瞌睡虫》。 它接近Unity代码,但有3行,因为不能在同一行上读取和更新

Bevy只有@Sleepyhead建议的transform.forward,它进入Z方向:

[内联] 发布fn转发和自->Vec3{ self.rotation*Vec3::unit_z } 我修改了Y方向变换的代码。旋转*Vec3::单位Y 并将其用于最终解决方案:

transform.rotateQuat::from_rotation_z-turn_input*tank.turn_speed*time.delta_seconds; 让move_dir=transform.rotation*Vec3::unit_y*drive*tank.speed*time.delta_seconds; transform.translation+=move_dir;
目前还有一个有待解决的问题,就是如何添加更多的转换方向:

多亏了@Sleepyhead on discord,我找到了答案。 它接近Unity代码,但有3行,因为不能在同一行上读取和更新

Bevy只有@Sleepyhead建议的transform.forward,它进入Z方向:

[内联] 发布fn转发和自->Vec3{ self.rotation*Vec3::unit_z } 我修改了Y方向变换的代码。旋转*Vec3::单位Y 并将其用于最终解决方案:

transform.rotateQuat::from_rotation_z-turn_input*tank.turn_speed*time.delta_seconds; 让move_dir=transform.rotation*Vec3::unit_y*drive*tank.speed*time.delta_seconds; transform.translation+=move_dir; 当前有一个关于添加更多转换方向的未决问题:

该问题与将转换数据移出Mat4有关

这一点发生了变化,因此它没有值:Mat4字段,而是有,和

如果您想要代码的直译,那么应该是:

变换=变换::来自矩阵 transform.compute_矩阵 *Mat4::从旋转到平移 Quat::从旋转角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度, Vec3::单位y*驱动力*油箱速度*时间。增量秒, , ; 但是,使用和/或直接分配给和可能更为简单。

这是将变换数据移出Mat4时使用的

这一点发生了变化,因此它没有值:Mat4字段,而是有,和

如果您想要代码的直译,那么应该是:

变换=变换::来自矩阵 transform.compute_矩阵 *Mat4::从旋转到平移 Quat::从旋转角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度角度, Vec3::单位y*驱动力*油箱速度*时间。增量秒, , ; 但是,直接使用和/或分配给和可能更简单