Closed18

作業メモ:bevy 0.5 ⇒ 0.6

hyoihyoi
0.5
	let mut app = App::build();
0.6
	let mut app = App::new();
hyoihyoi

.system()を全て削除。

0.5
	.add_startup_system( spawn_camera.system() )
0.6
	.add_startup_system( spawn_camera )
hyoihyoi

Struct bevy::prelude::Visible
Struct bevy::prelude::Visibility
変更されている。

0.5
pub struct Visible {
    pub is_visible: bool,
    pub is_transparent: bool,
}
0.6
pub struct Visibility {
    pub is_visible: bool,
}
hyoihyoi

コンポーネントの宣言には#[ derive( Component ) ]が必須になった。

0.5
pub struct MessageDemo;
0.6
#[ derive( Component ) ]
pub struct MessageDemo;
hyoihyoi

single_mut()get_single_mut()へ名前が変わった。

  • 同様にsingle()get_single()へ名前変更
  • single_mut()single()はResult型を返さなくなりPanicする
0.5
pub fn single(
    &self
) -> Result<<<Q as WorldQuery>::Fetch as Fetch<'_>>::Item, QuerySingleError>

pub fn single_mut(
    &mut self
) -> Result<<<Q as WorldQuery>::Fetch as Fetch<'_>>::Item, QuerySingleError>
0.6
pub fn single(
    &'s self
) -> <<Q as WorldQuery>::ReadOnlyFetch as Fetch<'w, 's>>::Item

pub fn single_mut(
    &mut self
) -> <<Q as WorldQuery>::Fetch as Fetch<'_, '_>>::Item

pub fn get_single(
    &'s self
) -> Result<<<Q as WorldQuery>::ReadOnlyFetch as Fetch<'w, 's>>::Item, QuerySingleError>

pub fn get_single_mut(
    &mut self
) -> Result<<<Q as WorldQuery>::Fetch as Fetch<'_, '_>>::Item, QuerySingleError>
hyoihyoi

Enum bevy::window::WindowModeFullscreen関係が変更されている。

0.5
pub enum WindowMode {
    Windowed,
    BorderlessFullscreen,
    Fullscreen {
        use_size: bool,
    },
}
0.6
pub enum WindowMode {
    Windowed,
    BorderlessFullscreen,
    SizedFullscreen,
    Fullscreen,
}
hyoihyoi

AppBuilderAppへ変更されている。

0.5
impl Plugin for MyPlugin
{   fn build( &self, app: &mut AppBuilder ) { ... }
}
0.6
impl Plugin for MyPlugin
{   fn build( &self, app: &mut App ) { ... }
}
hyoihyoi

Struct bevy::prelude::TextBundleのメンバーである
pub visible: Visible,
pub visibility: Visibility,
変更されている。

0.5
    demo_text.visible.is_visible = false;
0.6
    demo_text.visibility.is_visible = false;
hyoihyoi

Struct bevy::prelude::SpriteBundle
Struct bevy::prelude::Spriteが変更されている。

  • Sprite::new()が無くなっている
  • 色の指定がSpriteBundle { material: }からSprite { color: }へ移され、Assets<ColorMaterial>が不要になった
0.5
fn sprite_preloading_anime_tile
(   ( x, y ): ( f32, f32 ),
    color_matl: &mut ResMut<Assets<ColorMaterial>>,
) -> SpriteBundle
{   let position = Vec3::new( x, y, SPRITE_TILE_DEPTH );
    let square   = Vec2::new( SPRITE_TILE_PIXEL, SPRITE_TILE_PIXEL );

    SpriteBundle
    {   material : color_matl.add( SPRITE_TILE_COLOR.into() ),
        transform: Transform::from_translation( position ),
        sprite   : Sprite::new( square ),
        ..Default::default()
    }
}
0.6
fn sprite_preloading_anime_tile
(   ( x, y ): ( f32, f32 ),
) -> SpriteBundle
{   let position = Vec3::new( x, y, SPRITE_TILE_DEPTH );
    let square   = Vec2::new( SPRITE_TILE_PIXEL, SPRITE_TILE_PIXEL );

    SpriteBundle
    {   transform: Transform::from_translation( position ),
        sprite   : Sprite
        {   color: SPRITE_TILE_COLOR.into(),
            custom_size: Some( square ),
            ..Default::default()
        },
        ..Default::default()
    }
}
hyoihyoi

.for_each_mut()を生やすQuerymutが必要になった。

0.5
fn move_preload_anime_tile
(   q: Query< &mut Transform >,)
{   :
    q.for_each_mut( | ( mut t ) | { ... } );
    :
}
0.6
fn move_preload_anime_tile
(   mut q: Query< &mut Transform >, // ここに mut が必要)
{   :
    q.for_each_mut( | ( mut t ) | { ... } );
    :
}
hyoihyoi

bevy 0.6に対応したクレートbevy_prototype_lyon = "0.4.0"
Struct bevy_prototype_lyon::geometry::GeometryBuilder::build_as()
第二引数colorsが無くなった。

0.5
pub fn build_as(
    shape: &impl Geometry,
    colors: ShapeColors,
    mode: DrawMode,
    transform: Transform
) -> ShapeBundle
0.6
pub fn build_as(
    shape: &impl Geometry,
    mode: DrawMode,
    transform: Transform
) -> ShapeBundle
hyoihyoi

1つ上のbevy_prototype_lyon = "0.4.0"build_as()の続き。
色の指定が第二引数modeの中(FillModeの中)に移されていた。

0.5
    GeometryBuilder::build_as
    (   &shapes::Circle { radius: SPRITE_DOT_RAIDUS, ..shapes::Circle::default() },
        ShapeColors::new( SPRITE_DOT_COLOR ),
        DrawMode::Fill( FillOptions::default() ),
        Transform::from_translation( position ),
    )
0.6
    GeometryBuilder::build_as
    (   &shapes::Circle { radius: SPRITE_DOT_RAIDUS, ..shapes::Circle::default() },
        DrawMode::Fill
        (   FillMode
            {   options: FillOptions::default(),
                color: SPRITE_DOT_COLOR,
            }
        ),
        Transform::from_translation( position ),
    )
hyoihyoi

QuerySetQueryではなくQueryStateで組むようになった。

0.5
pub fn detect_collision
(   mut q_set: QuerySet
    <(  Query<( &mut Player, &mut Transform )>,
        Query<( &mut Chaser, &mut Transform )>,
    )>,
)
{...}
0.6
pub fn detect_collision
(   mut q_set: QuerySet
    <(  QueryState<( &mut Player, &mut Transform )>,
        QueryState<( &mut Chaser, &mut Transform )>,
    )>,
 )
{...}
hyoihyoi

1つ上のQuerySetの続き。0.6には以下が無くなった。

  • bevy::ecs::system::QuerySet::q0_mut()
  • bevy::ecs::system::QuerySet::q1_mut()
  • bevy::ecs::system::QuerySet::q2_mut()
  • bevy::ecs::system::QuerySet::q3_mut()

しかし名前に_mutがついていないq0() q1() q2() q3()で同じ効果が得られる。
※コンパイラと殴り合いが少し発生したが、和解はすぐ可能だった

0.5
pub fn detect_collision
(   mut q_set: QuerySet
    <(  Query<( &mut Player, &mut Transform )>,
        Query<( &mut Chaser, &mut Transform )>,
    )>,
)
{
  :
    let ( mut player, mut transform ) = q_set.q0_mut().iter_mut().next().unwrap();
    let ( p_grid_x, p_grid_y ) = player.grid_position;
  :
}
0.6
pub fn detect_collision
(   mut q_set: QuerySet
    <(  QueryState<( &mut Player, &mut Transform )>,
        QueryState<( &mut Chaser, &mut Transform )>,
    )>,
 )
{
  :
    let mut q0 = q_set.q0();  //ここをletで束縛しないといけない
    let ( mut player, mut transform ) = q0.iter_mut().next().unwrap();
    let ( p_grid_x, p_grid_y ) = player.grid_position;
  :
}
hyoihyoi

bevy 0.6 からは bevy_webgl2 に頼らなくてもWASMに変換できるようになった。

0.5
https://github.com/mrk-its/bevy_webgl2_app_template をテンプレートに使う
0.6
cargo build --target wasm32-unknown-unknown

buildの結果 ./target/wasm32-unknown-unknown/release/xxx.wasm が出力されたら、

wasm-bindgen --out-dir ./out --target web --no-typescript ./target/wasm32-unknown-unknown/release/xxx.wasm

すると ./out/xxx_bg.wasm と ./out/xxx.js が出力される。
index.html等から ./out/xxx.js を呼び出せば ./out/xxx_bg.wasm を実行できる(ハズ)
hyoihyoi

Struct bevy::math::Vec2::from_slice_unaligned()の名前が変わっている。

  • 他にも名前が変更されたものがあった(Vec2::write_to_slice_unaligned()等)
0.5
pub fn from_slice_unaligned(slice: &[f32]) -> Vec2
0.6
pub fn from_slice(slice: &[f32]) -> Vec2
このスクラップは2022/01/20にクローズされました