Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sburris0/bevy_flycam

Basic first-person fly camera for the Bevy game engine
https://github.com/sburris0/bevy_flycam

3d bevy bevy-engine firstperson

Last synced: about 1 month ago
JSON representation

Basic first-person fly camera for the Bevy game engine

Awesome Lists containing this project

README

        

# bevy_flycam

[![Crates.io](https://img.shields.io/crates/v/bevy_flycam)](https://crates.io/crates/bevy_flycam)
![Crates.io](https://img.shields.io/crates/l/bevy_flycam)
![docs.rs](https://img.shields.io/docsrs/bevy_flycam)

A basic first-person fly camera for Bevy 0.14

## Controls

* WASD to move horizontally
* SPACE to ascend
* LSHIFT to descend
* ESC to grab/release cursor.

## Comparison

There are a few notable differences from [bevy_fly_camera](https://github.com/mcpar-land/bevy_fly_camera)...

* No linear interpolation
* Cursor grabbing
* Shorter code
* Single-line setup
* A tiny bit faster?

## Usage

1. Add to `Cargo.toml` or copy `lib.rs` to your own file

```toml
[dependencies]
bevy = "0.14"
bevy_flycam = "*"
```

or

```toml
[dependencies]
bevy = "0.14"
bevy_flycam = { git = "https://github.com/sburris0/bevy_flycam" }
```

2. Include the prelude:

```rust
use bevy_flycam::prelude::*;
```

3. Add the `PlayerPlugin`:

```rust
#[bevy_main]
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PlayerPlugin)
.run();
}
```

Note that `PlayerPlugin` will spawn a camera for you. See [Using your own camera](#using-your-own-camera) for details on how to
use a pre-existing one.

Alternatively you can see the example `basic.rs` or `scroll.rs` located in the examples folder.
You can run the example by cloning this repository and run the command: `cargo run --release --example basic`

## Customization

### Movement and keybindings

To modify player movement speed or mouse sensitivity add it as a resource.
Same thing goes for the keybindings used for moving the camera.

```Rust
#[bevy_main]
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PlayerPlugin)
.insert_resource(MovementSettings {
sensitivity: 0.00015, // default: 0.00012
speed: 12.0, // default: 12.0
})
.insert_resource(KeyBindings {
move_ascend: KeyCode::E,
move_descend: KeyCode::Q,
..Default::default()
})
.run();
}
```

### Using your own camera

You can also use `NoCameraPlayerPlugin` if you want to use your own camera. Be sure to add the `FlyCam` component to your own camera or else this plugin won't know what to move.

```Rust
#[bevy_main]
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(NoCameraPlayerPlugin)
.add_systems(Startup, setup)
.run();
}

fn setup(mut commands: Commands) {
commands.spawn((
Camera3dBundle {
transform: Transform::from_xyz(0.0, 2.0, 0.5),
..default()
},
FlyCam
));
}
```

## Support

[![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking)

bevy_flycam's crate version follows bevy's minor version as shown:
| bevy | bevy_flycam |
| :-- | :-- |
| `0.14.0` | `0.14.0` |
| `0.13.0` | `0.13.0` |
| `0.12.0` | `0.12.0` |
| `0.11.0` | `0.11.0` |
| `0.10.1` | `0.10.1` |

## Contributing

PRs are very welcome.