#camera #scroll #2d #bevy

bevy_scrolling_2d_camera

支持使用鼠标右键拖动滚动的简单2D相机插件

5个不稳定版本

0.3.0 2024年8月10日
0.2.0 2024年6月20日
0.1.2 2024年6月8日
0.1.1 2024年6月4日
0.1.0 2024年6月4日

#641游戏开发

Download history 390/week @ 2024-06-03 30/week @ 2024-06-10 144/week @ 2024-06-17 4/week @ 2024-06-24 10/week @ 2024-07-01 99/week @ 2024-08-05 23/week @ 2024-08-12

122 每月下载次数

MIT 许可证

11KB
175

Bevy 滚动 2D 相机插件

这是一个为 bevy 引擎提供的简单 2D 相机插件,支持使用鼠标右键拖动滚动和鼠标滚轮缩放。

它适用于 RTS 或模拟 2D 游戏。

请查看 example 文件夹中的 cargo 项目以了解其工作方式。

bevy bevy_scrolling_2d_camera
0.14.1 0.3.0
0.13 ^0.1.*

拖动功能的想法

按下鼠标右键时,插件会记录光标位置。从记录位置到当前光标位置的向量被用作相机速度。相机根据计算出的速度更新其平移。

此插件为您的项目添加的内容

此插件最小化,但它为您的项目添加以下内容。

  1. 一个持有相机实体的资源。
#[derive(Resource)]
pub struct ScrollingCamera{
    pub entity: Option<Entity>,
}
  1. 一个存储相机速度的资源。
#[derive(Resource)]
pub struct CameraVelocity{
    pub v: Vec3,
}
  1. 一个在按下鼠标右键时标记光标位置的资源。
#[derive(Resource)]
pub struct CapturedMouseRightClickPosition{
    pub pos: Option<Vec2>,
}
  1. 一个限制缩放比例的资源。(从 0.2.0 版本开始添加)
#[derive(Resource)]
pub struct ZoomBound{
    pub max: f32,
    pub min: f32,
}
  1. 一个表示相机当前状态的枚举状态。
#[derive(States, Debug, Clone, Copy, Eq, PartialEq, Hash, Default)]
pub enum CameraState {
    #[default]
    Idling,
    Scrolling,
}
  1. 四个更新系统以控制相机的移动。
pub fn camera_move(
    mut query: Query<&mut Transform, With<Camera>>,
    velocity: Res<CameraVelocity>,
    time: Res<Time>,
    scrolling_camera: Res<ScrollingCamera>,
) {/*...*/}
pub fn capture_mouse_right_click_for_scrolling(
    mut commands: Commands,
    windows: Query<&Window>,
    input:  Res<ButtonInput<MouseButton>>,
    mut click_pos : ResMut<CapturedMouseRightClickPosition>,
) {/*...*/}
pub fn control_camera_movment(
    mut commands: Commands,
    window_query: Query<&Window>,
    camera_query: Query<(&Camera, &GlobalTransform)>,
    input:  Res<ButtonInput<MouseButton>>,
    click_pos : Res<CapturedMouseRightClickPosition>,
    mut velocity: ResMut<CameraVelocity>,
    mut gizmos: Gizmos,
    scrolling_camera: Res<ScrollingCamera>,
){/*...*/}
pub fn camera_zoom(
    mut mouse_wheel_event: EventReader<MouseWheel>,
    mut query: Query<&mut OrthographicProjection>,
    time: Res<Time>,
    scrolling_camera: Res<ScrollingCamera>,
) {/*...*/}

依赖项

~23MB
~427K SLoC