#bevy-plugin #ios #bevy #swift #mobile #gamedev

bevy_ios_gamecenter

Bevy插件和Swift包,提供从Bevy应用中访问iOS原生GameKit(Gamecenter)的功能

10个版本

0.2.0 2024年7月11日
0.1.8 2024年5月11日

#204游戏开发

Download history 272/week @ 2024-05-01 247/week @ 2024-05-08 16/week @ 2024-05-15 90/week @ 2024-05-22 6/week @ 2024-05-29 71/week @ 2024-06-05 24/week @ 2024-06-12 19/week @ 2024-06-19 2/week @ 2024-06-26 60/week @ 2024-07-03 125/week @ 2024-07-10

每月下载量 187

MIT许可证

34KB
608

bevy_ios_gamecenter

crates.io docs.rs discord

Bevy插件和Swift包,用于从Bevy应用中访问iOS原生GameKit(Gamecenter)。它使用Swift-Bridge来自动生成粘合代码和传输数据类型。

demo

使用此crate的游戏演示:zoolitaire.com

另请参阅 bevy_ios_iapbevy_ios_notificationsbevy_ios_alertsbevy_ios_reviewbevy_ios_impact

功能

  • 身份验证
  • 保存游戏(基于iCloud)
  • 成就
  • 排行榜

待办事项

  • 挑战,匹配

说明

  1. 添加到XCode:添加SPM(Swift Package Manager)依赖
  2. 添加Rust依赖
  3. 设置插件

1. 添加到XCode

  • 添加 GameKit 框架:![gamekit](https://img.gs/czjpqfbdkz/800,2x/https://raw.githubusercontent.com/rustunit/bevy_ios_gamecenter/be67f918e876756eaebb54d930af46036dc2f76b/crate/assets/framework.png)

  • 转到 文件 -> 添加包依赖 并将 https://github.com/rustunit/bevy_ios_gamecenter.git 粘贴到右上角的搜索栏:![xcode](https://img.gs/czjpqfbdkz/800,2x/https://raw.githubusercontent.com/rustunit/bevy_ios_gamecenter/be67f918e876756eaebb54d930af46036dc2f76b/crate/assets/xcode-spm.png)

注意:使用的rust crate版本必须与Swift Package完全相同。建议使用特定版本(如截图中的0.2.0)以确保始终使用二进制匹配的版本!

2. 添加Rust依赖

cargo add bevy_ios_gamecenter

# always pin to the same exact version you also of the Swift package
bevy_ios_gamecenter = { version = "=0.2.0" }

3. 设置插件

初始化Bevy插件

// request auth right on startup
app.add_plugins(IosGamecenterPlugin::new(true));
fn bevy_system() {
    bevy_ios_gamecenter::achievements_reset();
    
    // update achievement progress, 100 % will complete it
    bevy_ios_gamecenter::achievement_progress("id".into(),100.);

    bevy_ios_gamecenter::leaderboards_score(
        "raking id".into(),
        // score
        1,
        // context
        2,
    );

    // open gamecenter view (leaderboard)
    bevy_ios_gamecenter::trigger_view(view_states::LEADERBOARDS);

    // save arbitrary binary buffer as a savegame
    bevy_ios_gamecenter::save_game("test".into(), vec![1, 2, 3].as_slice());

    // request list of `IosGCSaveGame`
    bevy_ios_gamecenter::fetch_save_games();

    // based on result of above `fetch_save_games` request
    let save_game = IosGCSaveGame {..} 
    bevy_ios_gamecenter::load_game(save_game);
}

处理从iOS返回到我们的Rust中的响应事件

fn process_gamecenter_events(
    mut events: EventReader<IosGamecenterEvents>,
) {
    for e in events.read() {
        match e {
            IosGamecenterEvents::SaveGames(response) => todo!(),
            IosGamecenterEvents::Player(player) => todo!(),
            IosGamecenterEvents::Authentication(response) => todo!(),
            IosGamecenterEvents::SavedGame(response) => todo!(),
            IosGamecenterEvents::LoadGame(response) => todo!(),
            IosGamecenterEvents::AchievementProgress(response) => todo!(),
            IosGamecenterEvents::AchievementsReset(response) => todo!(),
            IosGamecenterEvents::LeaderboardScoreSubmitted(response) => todo!(),
        }
    }
}

Bevy版本支持

bevy bevy_ios_gamecenter
0.14 0.2,main
0.13 0.1

许可证

此仓库中的所有代码均采用双重许可,任选其一:

这意味着您可以选择您喜欢的许可证。

您的贡献

除非您明确声明,否则根据Apache-2.0许可定义的您提交的任何有意包含在工作中的贡献,将按照上述方式双许可,不附加任何额外条款或条件。

依赖关系

~27MB
~450K SLoC