让角色始终朝向鼠标光标:Bevy引擎旋转计算异常问题
问题:静态相机下玩家移动到屏幕角落时无法朝向光标
我尝试过多种实现方案,但我的使用场景和其他案例略有不同:采用静态相机,玩家可在屏幕内自由移动。
当玩家处于屏幕中心时,计算逻辑能正常工作:
然而当玩家移动到屏幕角落(本案例为右下角)时,角色无法朝向光标。看起来计算逻辑忽略了玩家位置,仅考虑了光标相对于窗口的位置:
我的代码基于Rust语言(Bevy引擎)实现,逻辑可适配至任意语言:
let window_size = Vec2::new(window.width(), window.height()); let difference = mouse_position.extend(0.0) - window_size.extend(0.0) / 2.0 - player.translation; let angle = difference.y.atan2(difference.x) + PI; *transforms.get_mut(game.player.entity.unwrap()).unwrap() = Transform { translation: player.translation, rotation: Quat::from_rotation_y(angle), ..default() };
- 注1:
extend(0.0)通过添加0.0作为z分量,将Vec2转换为Vec3。 - 注2:
player.translation是存储玩家屏幕位置的Vec3类型变量。
内容的提问来源于stack exchange,提问作者AndreFeijo
相关产品推荐
相关产品推荐

