Rust 二维贝维旋转
我正在尝试使用Bevy 0.3,并且我能够通过Rust 二维贝维旋转,rust,bevy,Rust,Bevy,我正在尝试使用Bevy 0.3,并且我能够通过Camera2dComponents::default()轻松使用内置转换。 这是自顶向下的2d 问题是尝试将播放器的旋转同步到鼠标: evreader.iter中事件的(&cursor\u moved\u事件){ println!(“{:?}”,变换); 查看(Vec3::new(event.position.x(),event.position.y(),0.0),Vec3::new(0.0,0.0,1.0)); println!(“{:?}”,变
Camera2dComponents::default()
轻松使用内置转换。
这是自顶向下的2d
问题是尝试将播放器的旋转同步到鼠标:
evreader.iter中事件的(&cursor\u moved\u事件){
println!(“{:?}”,变换);
查看(Vec3::new(event.position.x(),event.position.y(),0.0),Vec3::new(0.0,0.0,1.0));
println!(“{:?}”,变换);
}
在这个变换中,当然是我的球员的变换。
以下是它的输出:
Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }
Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.5012898, -0.49870682, -0.49870682, 0.5012898), scale: Vec3(1.0, 1.0, 1.0) }
我对2d中的look\u是什么感到有点困惑,但我尝试了几个不同的值,结果总是一样的:一旦look\u运行,玩家就会从视图中消失。
为什么在那之后摄像机再也看不到球员了,我的这种表情有什么不对
感谢您使用的是2D,而不是<代码>变换更通用,还包括3D所需的内容
在你的情况下,听起来可能不会像你认为的那样。它创建了一个视图矩阵,该视图矩阵是“在
”的一个位置(),并朝向一个目标
(第一个参数)。up
是“世界向上”的3D矢量。因此,它可以计算旋转校正
更新的解决方案: 如果要旋转自上而下的2D播放器,即让播放器的一侧朝向光标。然后你需要计算玩家的位置和目标之间的角度。你可以很容易地使用
let pos:Vec2=。。。;
让目标:Vec2=。。。;
让角度=(目标位置)。角度与(位置)之间;
transform.rotation=Quat::from_rotation_z(角度);
根据播放器本身的方向,即如果使用精灵,默认方向可能是“看”向左侧或向上。然后可能需要偏移角度
。您可以通过添加(或需要多少)来实现这一点
假设transform.translation
是播放器的中心位置,那么它将如下所示:
使用bevy::math:{Quat,Vec2};
设pos=transform.translation.truncate();
让target=event.position;
让角度=(目标位置)。角度与(位置)之间;
transform.rotation=Quat::from_rotation_z(角度);
旧答案: 因为您希望在自顶向下的二维视图中将相机放置在光标上。然后,你必须使用或只是移动,这是你的相机的位置
transform.translation=Vec3::new(event.position.x(),event.position.y(),0.0);
如果您希望光标位置位于屏幕中心,则可能需要减去屏幕大小的一半。对,这不是我想做的,我希望玩家“注视”鼠标,因此基本上只要旋转,始终面向鼠标。我使用look_-at和鼠标作为目标,希望它能改变旋转方向,使其朝向光标的位置,但它只会使玩家消失。我还没碰相机,但我会让它跟在播放机后面on@Ulrar啊,我明白了,我误解了你的意思。我已经更新了答案:)