用途:当 2D 或 3D 视图需要渲染时使用本技能,涉及 Camera、Camera2d、Camera3d 与 Transform。库版本固定为 0.20。
ECS 结构:Camera 表示视点(投影与渲染目标),缺少渲染图的 Camera 会在运行时出错。Camera2d 启用 2D 图,需要 Camera、Projection、Frustum。Camera3d 启用主 3D 图,需要 Camera 与 Projection。3D 为右手坐标系:X 向右、Y 向上、Z 向后,因此前方是 -Z。
生成:用 commands.spawn((Camera3d::default(), Transform::from_xyz(...).looking_at(Vec3::ZERO, Vec3::Y))) 生成相机。第二个相机可设置 Camera { order: 1, clear_color: ClearColorConfig::None, ..default() },使其叠加绘制而不清屏。在 Startup 中生成。
查询:系统可使用 (&Camera, &GlobalTransform) 配合 With<Camera2d>。Camera::viewport_to_world_2d 可把视口位置映射为正交相机沿 Z 的 2D 世界坐标。
相机行为:跟随、分屏视口、创伤偏移等都在 Update 中实现。跟随用 FollowCam 组件(含 offset、stiffness),通过 target.translation + offset 与 lerp 平滑移动,并 look_at 目标。分屏使用 Viewport 设置 physical_position、physical_size 与 depth,并调整 Camera::order。抖动可用 Trauma 组件随时间衰减。
渲染目标:纹理目标即在相机实体上加 RenderTarget::Image 组件;分屏示例保留窗口目标并设置 Camera::viewport。
限制:Camera 必须有渲染图,应生成 Camera2d 或 Camera3d 让 Bevy 插入 CameraRenderGraph。不要对同一组件使用两个无序的可变查询,需用 .chain() 排序或拆分写入。不要编造物理、导航、网络或 XR crate,不要使用第三方相机 crate,Bevy 不提供现成的跟随、弹簧臂或抖动组件。