5

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Achievements/Achievements.html#//apple_ref/doc/uid/TP40008304-CH7-SW13を読みました。

1 つのデバイスで複数のゲーム センター ユーザーをサポートするという問題について、私は戸惑っています。

特に、アドベンチャー ゲームやクロスワード パズル ゲームのように、全体的に永続的に進行するゲームでこれを行う方法について困惑しています。

つまり、ゲームには2種類あると思います。1 つは、ゲームを開始し、死ぬまで進み、その後ゲームが終了するというものです。こういうゲームはGame Centerのマルチユーザーモデルで扱いやすそうです。新しい Game Center プレーヤーがサインインすると、Game Center の統計情報を読み込むことができます。その後、彼らはゲームをプレイできるようになり、それに応じて実績やスコアを調整します。唯一の特別なケースは、Game Center のプレーヤー A がプレイしていて、ゲームがバックグラウンドに移行し、Game Center のプレーヤー B がログインした後、ゲームがフォアグラウンドになった場合はどうなるかということです。この場合、進行中のゲームを終了して、「申し訳ありませんが、Game Center ユーザーを切り替えました。新しいゲームを開始する必要があります。」と言うだけで十分に簡単に思えます。

しかし、もう 1 つの種類のゲームは、通常は自動的に、全体的な進行状況が持続するゲームです。たとえば、100 パズルのクロスワード ゲームがあるとします。プレイヤー A が 8 つのパズルを完成させ、9 番目のパズルを完成させている途中で、Game Center のプレイヤーがプレイヤー B に変わったとします。プレイヤー A はすでに「5 つのパズルを解いた」実績を獲得しているとします。プレーヤー B がサインインした後、何が起こるはずですか?

これを行う「正しい」方法の 1 つ (上記の Apple のドキュメントで暗示されているように思われる方法) は、ゲームが各 Game Center プレイヤーの完全な保存状態を維持することになっていることです。そのため、プレーヤー B がサインインすると、プレーヤー A の状態が自動的に脇に保存され、パズルがクリアされて、プレーヤー B が最初から作業できるようになります。それでも、プレイヤー A が新しいデバイスにゲームをインストールするとどうなるかという問題はまだあります。新しくインストールされたゲームのパズルは 0 個完成しますが、プレイヤー A の Game Center ユーザーは既に「5 個のパズルを解いた」という実績を持っています。では、プレイヤー A の実績をリセットする必要がありますか? パズルの答えを自動入力して、プレイヤー A のゲームを彼の業績に合わせるべきでしょうか?

Game Center のモデルは、この種の全体的な永続的な進歩を念頭に置いて設定されていないように思えます。(実際、ゲームが複数のプレイヤーの状態を管理する独自のサインイン システムを備えている場合、Game Center の複数のプレイヤーを扱うのはさらに複雑になるように思えます。プレーヤーをゲームのサインイン プレーヤーに集中させます。私が見る限り、ゲームはこれを機能させるために一致するインターフェイスを提示する必要があります。)

いずれにせよ、これに対処する方法の「貧乏人のバージョン」についての私の見解は次のとおりです。つまり、グローバル永続状態 (クロスワード ゲームのような) を持つ通常のシングル プレイヤー ゲームを、Game Center で「十分に」機能させる方法です。

(1) ゲームは、ゲームを Game Center の統計に「同期」しようとしません。たとえば、あるデバイスで 9 つのパズルを解いてから、別のデバイスにゲームをインストールし、同じ Game Center ユーザーでサインインした場合、Game Center プレーヤーがまだ「謎を5つ解いた」実績。

(2) その後、再び 5 つのパズルを完成させても、既にその実績を獲得しているため、何も変わりません。しかし、25 個のパズル (または次の達成レベルが何であれ) を完了すると、その新しい成果を獲得できます。

(3) あなた (プレイヤー A) が 9 つのパズルを完成させた後、ゲームセンターからログアウトし、別の誰か (プレイヤー B) が同じデバイスにログインしたとします。この場合、プレーヤー B の実績を読み込みます。プレーヤー B は現在、ゲームで実績を持っていないとします。これの金持ちバージョンでは、プレイヤー B の成果に合わせてパズルをリセットすることになっていると思います。しかし、貧乏人のバージョンでは、ゲームの状態に合わせてプレイヤー B の実績をただちに (そして静かに) 更新します。そのため、プレイヤー B はすぐに「5 つのパズルを解いた」実績を取得します (それを「獲得」したのはプレイヤー A でしたが)。

この貧乏人のバージョンの要点は次のようになります。

(a) 2 人以上のプレーヤーが 1 つのデバイスでゲーム センターにサインインおよびサインアウトしている場合、実績が作成された時点でログインしているプレーヤーが誰であれ、その実績を取得します。さらに、状態がより高い場合、ログイン時にプレーヤーの実績がゲームの状態に「追いつく」ことになります。つまり、すべてのプレイヤーが「一緒に進歩する」ようなものです。1 人のプレイヤーが達成した成果は、サインインした他のプレイヤーに継承されます。

(b) アンインストール/再インストールまたは新しいデバイスへのインストールの場合、パズルに関してはゼロから始めますが、実績は高いポイントのままであり、それらの数を超え始めると、実績が追いつくために増加しますあなた。

つまり、要約すると、グローバルな永続的な進行状況を持つゲーム (アドベンチャー ゲーム、クロスワード ゲーム) は、複数の Game Center プレーヤーでこれらの問題に直面するように思えます。正しい道と貧乏人の道の2つの道があるように私には思えます。正しい方法は複雑に思えます。たとえば、アドベンチャー ゲームでは、ユーザーに次のような質問をする必要があります。プレーヤー B が最初からやり直せるように、ゲームをリセットしますか?」そして、任意の数のゲーム センター ユーザーの完全な状態 (インベントリ、マップなど) を保存できるように準備する必要があります。

貧乏人の解決策は理想的とは言えませんが、「通常の」ユースケースでは複数の Game Center を使用しないことを考えると、Game Center のサポートを「追加」したいだけの既存のゲームの場合、これは合理的な代替手段のように思えます。プレーヤーは常に 1 つのデバイスでサインインおよびサインアウトします。

だから私の質問は:

(a) この状況に関する私の分析は正しいですか?

(b) 私が概説した貧乏人の解決策は実行可能なものですか? 一般的に使われているものですか?

4

1 に答える 1