gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:32:26 25 4
gpt4 key购买 nike

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

我找不到解决方法,所有的矩阵、向量和四元数让我很难找到解决方案。

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

transform.Rotate(0, 0, -turn_input * turnSpeed * Time.deltaTime);
transform.position += transform.forward * drive * speed * Time.deltaTime;

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

*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,
);

最佳答案

那是 changed in Bevy 0.3使用“将变换数据移出 Mat4”(PR #596)

这改变了,所以 Transform有一个 value: Mat4 字段,那么它将有 translation: Vec3 , rotation: Quat , 和 scale: Vec3 .

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

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 .

关于rust - 如何在 bevy 中旋转和移动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65864409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com