如何在 Bevy 中根据用户输入任意移动相机

问题描述 投票:0回答:2

我使用 Camera2dBundle 将精灵和背景导入到我正在设置的场景中。但我不确定如何独立于精灵的移动来移动相机。基本上我不希望摄像机跟随玩家。我希望它不断地朝一个方向移动,无论用户输入如何。 我试过:

fn move_camera(mut camera: Query<&mut Transform, With<Camera>>)   {
  
     for mut transform in camera.iter_mut() {
        
            transform.translation.x += 5.0; 
     }  

但是这会移动玩家的 x 位置

我看到变换是由这些项目组成的:

Transform { translation: Vec3(0.0, 0.0, 999.9), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }

这是我接受用户输入的方式:

if keyboard_input.pressed(KeyCode::Right) {
            transform.translation.x += 2.0 * 5.0;
            transform.rotation = Quat::from_rotation_y(0.0).into();
            *atlas = player.run.clone();

有更好的方法吗?我可以添加要变形的物品吗?或者我可以做哪些修改?

rust bevy
2个回答
0
投票

我无法从你的问题中看出你这边出了什么问题,但这是我如何设置一个在 x 轴上独立移动并在 y 轴上跟随玩家的相机的方法:

use crate::{CameraMarker, PlayerMarker};
use bevy::prelude::*;

pub fn camera_movement_system(
    player_query: Query<&Transform, With<PlayerMarker>>,
    // The `Without` is necessary so bevy knows the player and camera are not the same component.
    mut camera_query: Query<&mut Transform, (With<CameraMarker>, Without<PlayerMarker>)>,
) {
    // I have only one camera
    let mut camera_transform = camera_query.single_mut();
    // I have only one player
    let player_transform = player_query.single();

    // x-Axis: always move to the right
    camera_transform.translation.x += 5.0;
    // Set the y-Axis camera position to the player position
    camera_transform.translation.y = player_transform.translation.y;

}

此代码片段期望您已完成所有设置。如果您不使用 Marker Components,它也应该与

Camera
而不是
CameraMarker
一起使用。


-1
投票

解决了。这并不是我想要的答案,但只需为玩家添加相反方向的运动就可以了。

// added
transform.translation.x -= -1.0 * 5.0;
//
if keyboard_input.pressed(KeyCode::Right)
    transform.translation.x += 2.0 * 5.0;
    transform.rotation =   
    Quat::from_rotation_y(0.0).into();
        *atlas = player.run.clone();
© www.soinside.com 2019 - 2024. All rights reserved.