首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bevy中旋转和移动对象

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

Stack Overflow用户
提问于 2021-01-24 05:08:33
回答 2查看 716关注 0票数 1

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

我找不到怎么做,所有的矩阵,向量和四元数使我很难找到解决方案。

这是我想要做的Unity等价物:

代码语言:javascript
复制
transform.Rotate(0, 0, -turn_input * turnSpeed * Time.deltaTime);
transform.position += transform.forward * drive * speed * Time.deltaTime;

我曾经在Bevy 0.2.1中使用过这段代码,但在更新到0.4后它就崩溃了

代码语言:javascript
复制
*transform.value_mut() = *transform.value()
    * Mat4::from_rotation_translation(
        Quat::from_rotation_z(-turn_input * tank.turn_speed * time.delta_seconds),
        Vec3::unit_y() * drive * tank.speed * time.delta_seconds,
    );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-24 05:32:02

感谢@Sleepyhead on discord,我找到了答案。它很接近Unity代码,但只有3行,因为你不能在同一行上阅读和更新。

Bevy只有transform.forward() (由@Sleepyhead建议),它是Z方向的:https://docs.rs/bevy/0.4.0/bevy/prelude/struct.Transform.html#method.forward

代码语言:javascript
复制
#[inline]
pub fn forward(&self) -> Vec3 {
    self.rotation * Vec3::unit_z()
}

我修改了Y方向transform.rotation * Vec3::unit_y()的代码,并在最终解决方案中使用了以下代码:

代码语言:javascript
复制
transform.rotate(Quat::from_rotation_z(-turn_input * tank.turn_speed * time.delta_seconds()));
let move_dir = transform.rotation * Vec3::unit_y() * drive * tank.speed * time.delta_seconds();
transform.translation += move_dir;

目前有一个关于添加更多转换方向的未决问题:https://github.com/bevyengine/bevy/issues/1298

票数 1
EN

Stack Overflow用户

发布于 2021-01-24 05:32:11

这是带有"Move transform data out of Mat4“(PR #596)的changed in Bevy 0.3

这种情况发生了变化,因此不再使用Transformvalue: Mat4字段,而是使用translation: Vec3rotation: Quatscale: Vec3

如果你想要代码的直译,那就是:

代码语言:javascript
复制
transform = Transform::from_matrix(
    transform.compute_matrix()
        * Mat4::from_rotation_translation(
            Quat::from_rotation_z(-turn_input * tank.turn_speed * time.delta_seconds),
            Vec3::unit_y() * drive * tank.speed * time.delta_seconds,
        ),
);

但是,使用transform.rotate()和/或直接分配给transform.translationtransform.rotation可能更简单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65864409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档