关于 bevy-cameras
面向 Bevy 0.19 开发者的摄像机配置技能,涵盖视图、渲染目标和摄像机控制。还说明投影与光照选项及版本相关的配置要点。
主要功能
- 01摄像机与投影设置
- 02配置渲染到纹理
- 03自由视角与平移控制器
- 04摄像机分层排序
- 05逐摄像机环境光
- 06第三人称摄像机指导
适用场景
- 01设置游戏主摄像机
- 02将小地图或传送门渲染到纹理
- 03添加自由视角或平移控制
- 04组合摄像机叠加层
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-cameras安装后在 Claude Code 中输入/bevy-cameras确认已加载。
附带文件references/third-person-orbit.md
详细介绍
Bevy 0.19 — 摄像机
何时使用此技能
- 生成主游戏摄像机。
- 渲染到纹理(小地图、传送门、后处理目标)。
- 想要直接使用自由视角或平移控制器,而无需自行编写。
- 配置多个摄像机,并使用不同的
order实现叠加渲染。 - 按摄像机设置环境光亮度。
- 构建第三人称枢轴/悬臂摄像机,支持固定姿态插值和 Rapier 障碍物射线检测。
典型模式
FreeCamera/PanCamera 受 Cargo 功能控制。在 Cargo.toml 中:
bevy = { version = "0.19", features = ["free_camera", "pan_camera"] }
use bevy::asset::RenderAssetUsages;
use bevy::camera::RenderTarget;
use bevy::camera_controller::free_camera::{FreeCamera, FreeCameraPlugin};
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(FreeCameraPlugin) // adds the input wiring
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
// 1. Main camera with the built-in free-look controller.
commands.spawn((
Camera3d::default(),
FreeCamera::default(),
Transform::from_xyz(0.0, 4.0, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
));
// 2. A texture target for an off-screen render pass (mini-map, portal).
let size = bevy::render::render_resource::Extent3d {
width: 512,
height: 512,
depth_or_array_layers: 1,
};
let mut image = Image::new_fill(
size,
bevy::render::render_resource::TextureDimension::D2,
&[0; 4],
bevy::render::render_resource::TextureFormat::Bgra8UnormSrgb,
RenderAssetUsages::default(),
);
image.texture_descriptor.usage =
bevy::render::render_resource::TextureUsages::TEXTURE_BINDING
| bevy::render::render_resource::TextureUsages::COPY_DST
| bevy::render::render_resource::TextureUsages::RENDER_ATTACHMENT;
let image_handle = images.add(image);
// 3. A second camera that draws into the texture.
// RenderTarget is now a *separate* component, not Camera.target.
commands.spawn((
Camera3d::default(),
Camera { order: -1, ..default() }, // -1 = render before the main camera
RenderTarget::Image(image_handle.into()),
Transform::from_xyz(10.0, 5.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y),
));
}
选择投影方式
use bevy::prelude::*;
use bevy::camera::Projection;
# fn _proj(mut commands: Commands) {
// Default perspective (45° vertical FOV).
commands.spawn((Camera3d::default(), Projection::default()));
// Orthographic for top-down or strategy views.
commands.spawn((
Camera3d::default(),
Projection::Orthographic(OrthographicProjection {
scale: 10.0,
..OrthographicProjection::default_3d()
}),
));
# }
环境光:世界默认值与按摄像机设置
use bevy::prelude::*;
use bevy::light::GlobalAmbientLight;
# fn _amb(app: &mut App, mut commands: Commands) {
// World default — applies everywhere unless a camera overrides.
app.insert_resource(GlobalAmbientLight {
brightness: 200.0,
..default()
});
// Per-camera override (`AmbientLight` is a Component).
commands.spawn((Camera3d::default(), AmbientLight { brightness: 1000.0, ..default() }));
# }
Bevy 0.19 注意事项
RenderTarget是独立组件。Camera { target: ... }是旧写法。生成摄像机时,将RenderTarget与Camera3d/Camera一起添加。AmbientLight不再是Resource。 它是按摄像机设置的组件。世界默认值存储在GlobalAmbientLight资源中。ImageRenderTarget::scale_factor的类型是f32(以前用FloatOrd包装)。- 摄像机的
order为有符号数。 值越小,渲染越早。对于要在主渲染过程中采样的离屏渲染通道,请使用order: -1。 FreeCamera/PanCamera需要对应的插件和 Cargo 功能。 添加features = ["free_camera", "pan_camera"];仅生成组件不会安装其输入系统。- 导入:
bevy::camera::RenderTarget、bevy::camera_controller::{free_camera::*, pan_camera::*}、bevy::light::GlobalAmbientLight。这些都不在 prelude 中。
另请参阅
- 第三人称环绕摄像机 — 枢轴/悬臂分离、 俯仰限制、平滑处理、固定插值、球体投射、迟滞和角色淡出。
bevy-rendering— 渲染器选择、前向/延迟渲染 和渲染系统。bevy-input-actions— 可重新绑定的摄像机/瞄准输入 和正确的鼠标位移传递。bevy-physics— Rapier 场景查询设置和过滤。bevy-pbr-materials— 光照和摄像机可见的 材质。bevy-a11y— FOV、抖动、运动和视口无障碍功能。
评论
支持 Markdown