如何修改bevy_mod_picking默认选中高亮颜色(透明化需求)
修改bevy_mod_picking选中网格高亮颜色的方案
核心组件关系说明
Highlight只是标记组件,仅用来告知系统该实体需要启用高亮逻辑,本身不存储任何样式配置Highlightable才是控制高亮样式的核心组件,默认会自动给添加了PickableBundle的实体挂载,你可以通过手动添加/修改它来覆盖默认行为
单个实体修改方案
如果只需要给特定实体隐藏高亮效果,在创建实体时手动添加Highlightable组件,将选中、悬停、按下状态的颜色设为完全透明:
use bevy::prelude::*; use bevy_mod_picking::prelude::*; fn spawn_pickable_cube(commands: &mut Commands, meshes: &mut ResMut<Assets<Mesh>>, materials: &mut ResMut<Assets<StandardMaterial>>) { commands.spawn(( PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::WHITE.into()), ..default() }, PickableBundle::default(), Highlight, // 启用高亮标记 // 覆盖默认高亮配置,设置全透明隐藏效果 Highlightable { selected: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), hovered: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), pressed: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), ..default() }, )); }
全局默认值修改方案
如果要让所有拾取实体默认隐藏高亮,直接在注册HighlightPlugin时配置全局默认值:
use bevy::prelude::*; use bevy_mod_picking::prelude::*; use bevy_mod_picking::highlight::HighlightPlugin; fn main() { App::new() .add_plugins(DefaultPlugins) .add_plugins(PickingPlugins) // 全局配置高亮默认样式 .add_plugins(HighlightPlugin { selected_default: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), hovered_default: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), pressed_default: HighlightKind::new_static(Color::rgba(0.0, 0.0, 0.0, 0.0)), ..default() }) .add_systems(Startup, spawn_pickable_cube) .run(); }
相关编码模式参考
- 标记组件+配置组件分离:这类ECS库常用模式,标记组件(如
Highlight)仅做逻辑标识,配置组件(如Highlightable)存储具体参数,避免单一组件职责过重 - 全局默认+局部覆盖:插件提供全局默认配置,同时允许单个实体通过挂载配置组件覆盖全局规则,兼顾统一性和灵活性
- 静态/动态高亮切换:
HighlightKind提供new_static(固定颜色)和new_dynamic(动态生成颜色)两种模式,后者可以根据实体状态、资源等动态调整高亮样式,适合复杂场景
内容的提问来源于stack exchange,提问作者dim_voly
相关产品推荐
相关产品推荐

