mcpField
B
bevy-ui

bevy-ui

github.com/chrisgliddon開発2687 回インストール9 週間前に更新
リポジトリ

bevy-ui について

ゲーム UI を開発する人向けに、Bevy 0.19 の UI 構築を案内するリファレンススキルです。レイアウト、操作、テキストスタイル、フォーカス管理、アクセシビリティラベル、静的・動的な子ツリーを扱います。

主な機能

  1. 01Node ベースの UI レイアウト構築
  2. 02ボタンの操作状態の処理
  3. 030.19 API によるテキストスタイル設定
  4. 04入力フォーカスとアクセシブル名の管理
  5. 05静的・動的な子ツリーの作成

活用シーン

  1. 01メニュー、パネル、オーバーレイの実装
  2. 02Bevy 0.19 UI のテキストスタイル設定
  3. 03キーボードフォーカスとラベルの追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/chrisgliddon/bevy-skills --skill bevy-ui

インストール後、Claude Code で/bevy-uiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
accessibility.md
children-macro.md
colors-and-borders.md
gotchas.md
interaction.md
layout.md
palettes.md
text.md

詳細

Bevy 0.19 — UI

このスキルを使う場面

  • Node ベースのパネル、ボタン、ラベル、オーバーレイ、メニューをスポーンする。
  • Interaction::{None, Hovered, Pressed} と視覚状態を処理する。
  • 0.19 の Parley 移行後のテキストをスタイル設定する。
  • ポインターによって取得される InputFocus またはアクセシブルな名前を管理する。
  • children![] で静的なツリーを、with_children で動的なツリーを構築する。

基本パターン

use bevy::{
    input_focus::{FocusCause, InputFocus},
    prelude::*,
};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins) // includes InputFocusPlugin in 0.19
        .add_systems(Startup, setup)
        .add_systems(Update, style_button)
        .run();
}

fn setup(mut commands: Commands, assets: Res<AssetServer>) {
    commands.spawn(Camera2d);
    commands.spawn((
        Node {
            width: percent(100),
            height: percent(100),
            align_items: AlignItems::Center,
            justify_content: JustifyContent::Center,
            ..default()
        },
        children![(
            Button,
            AccessibleLabel::new("Start game"),
            Node {
                width: px(180),
                height: px(64),
                border: UiRect::all(px(3)),
                border_radius: BorderRadius::MAX,
                align_items: AlignItems::Center,
                justify_content: JustifyContent::Center,
                ..default()
            },
            BackgroundColor(Color::srgb(0.12, 0.12, 0.15)),
            BorderColor::all(Color::WHITE),
            children![(
                Text::new("Start game"),
                TextFont {
                    font: assets.load("fonts/FiraSans-Bold.ttf").into(),
                    font_size: FontSize::Px(32.0),
                    ..default()
                },
                TextColor(Color::WHITE),
            )],
        )],
    ));
}

fn style_button(
    mut focus: ResMut<InputFocus>,
    mut buttons: Query<
        (Entity, &Interaction, &mut BackgroundColor),
        (Changed<Interaction>, With<Button>),
    >,
) {
    for (entity, interaction, mut background) in &mut buttons {
        *background = match interaction {
            Interaction::Pressed => {
                focus.set(entity, FocusCause::Pressed);
                BackgroundColor(Color::srgb(0.15, 0.55, 0.25))
            }
            Interaction::Hovered => BackgroundColor(Color::srgb(0.22, 0.22, 0.28)),
            Interaction::None => BackgroundColor(Color::srgb(0.12, 0.12, 0.15)),
        };
    }
}

トピック

トピックリファレンス
Node、Val、フレックス/グリッドレイアウトレイアウト
FontSource、FontSize、TextLayoutテキスト
Button、Interaction、Changedインタラクション
色、境界線、角丸色と境界線
パレット定数パレット
InputFocus、セマンティクス、アクセシブルなラベルアクセシビリティ
静的および動的な子エンティティ子エンティティ
複数のトピックにまたがる注意点注意点

注意点

  • 新しく挿入されたコンポーネントは Changed<T> を満たします。インタラクションシステムは通常、最初の Update 時に新しいボタンを処理します。挿入とその後の変更を区別する必要がある場合は、Ref<T>::is_added() を使用してください。
  • ポインターのホバー状態と入力フォーカスは別のものです。カーソルが入ったり出たりしただけで、キーボードや支援技術のフォーカスを移動したり解除したりしないでください。
  • TextFont.font は FontSource です。Handle<Font> は .into() で変換してください。font_size は FontSize::Px(32.0) のような FontSize です。
  • InputFocus のフィールドは非公開です。get、set(entity, FocusCause)、clear を使用してください。DefaultPlugins が初期化します。
  • 表示されるテキストの子エンティティがある場合、Button の名前は推定されます。ただし、表示テキストがない場合、装飾的な場合、または意味が曖昧な場合は、AccessibleLabel を使用してください。

関連項目

コメント