Unityゲームでのプレイヤーの進行状況を保存する


22

Unityゲームエンジンを使用してゲームを作成しています。私はなど、レベル、経験値、選択した文字を含むプレイヤーの進行状況を保存する現在、私が使用していますplayerprefsを私はこれがうまくとして自分のモバイルデバイス(Androidの/ iOS版)でこのゲームを実行するゲーマーのために機能するかどうかを知りたいですデスクトップ(OSX / PC)として?そうでない場合、この情報をどのように保存する必要がありますか?各ステージをクリアした後、プレイヤーの進行状況を自動保存します。

回答:


30

PlayerPrefsはクロスプラットフォームで動作しますが、安全ではないため、ゲームの進行状況の保存ファイルにお勧めしません。プレーンテキストファイルとして、プレーヤーは簡単にファイルを開いて内容を変更してチートを実行したり、ゲームを予期せず動作させたりすることができます。滞在することも保証されていません。

PlayerPrefsは、コントロールマッピングや音楽/ sfx設定などの必須ではない設定情報を対象としています-プレーヤーはとにかく自由に変更でき、システム復元ポイントを使用して(たとえばWindowsで)それらのレジストリ情報の一部。これでハイスコアやキャンペーンの進捗が失われた場合、プレイヤーは当然のことながら動揺します!

代わりに、ゲームプレイの進行状況を自分のファイルに保存することをお勧めします(変更を困難にする場合は、通常はバイナリ、暗号化または署名されている可能性がありますが、これについてはPhilippのコメントを参照してください)。

Application.persistentDataPathを使用して、各プラットフォームで信頼できる保存場所を取得できます。これは通常、上記の例のような場合に消去されないユーザーデータフォルダーにあります。

保存先のパスを取得したら、通常のC#IOメソッドを使用してファイルを作成、書き込み、読み取りできます。詳細は保存ファイルの形式と構造によって大きく異なるため、問題が発生した場合は、何をしようとしているのか、どこで行き詰まっているのかを詳しく説明する新しい質問をすることをお勧めします。


30
私の意見では、savegameファイルを暗号化して署名することはスネークオイルです。熟練したハッカーがアクセスできるゲーム実行可能ファイルにキーとアルゴリズムを保存する必要があるため、安全ではありません。それも無意味です。シングルプレイヤーゲームの場合:なぜわざわざですか?プレイヤーが望む方法でゲームを楽しむことができます。マルチプレイヤーゲームの場合は、操作から安全であるサーバーにすべてを保存する必要があります。
フィリップ

5
@SamedTarıkÇETİN データパス(ゲームがインストールされている場所)と永続的なデータパス(新しいデータを保存するための信頼できる場所)には重要な違いがあります。一部のプラットフォームでは、ビルドされたゲームはインストールされたデータパスに書き込むことができないため、一般的なルールとして永続的なデータパスの場所に保存することをお勧めします。
DMGregory

2
@Philippには同意しますが、クライアント側のストレージは決して安全ではなく、多くの場合、シングルプレイヤーゲームのセキュリティを厳しくする必要はありませんが、最終的に適用するセキュリティまたは難読化の量は選択です各クリエイターは自分で作らなければなりません。この答えで、私はアスカーに情報を提供して、彼らのゲームに適したものについて情報に基づいた選択をしたいだけです。
DMGregory

1
一方では、@ Philippに同意しますが、テキストエディターでは完全に読みにくいシリアル化された保存ファイルも見ました。はい、おそらくどのようにして変更を加えるかを考え出すことができたでしょうが、ファイルが2メガグラムの生の16進数のように見えたので、それを見つけるのは非常に面倒でした。そのような場合、最も頑固な人だけがそれを分解しようとし、結果はゲーム内のそのポイントに固有のものになります(保存にユニットをもう1つ追加すると、後続のすべてのデータがダウンストリームにプッシュされます)。その後、再び、それは安全であること意図していませんでした。
Draco18s

2
@ShantanuSinghをPlayerPrefsに保存しないでください。そのような情報は、リモートデータベースに保存し、アプリの起動時に要求する必要があります。インターネット接続が利用できない場合の互換性のために、ローカルの安全な保存ファイル(つまり、暗号化)にフォールバックします。データベース値は、使用可能な場合、ローカル値を上書きする必要があります。他の方法で物事を処理するアプリ内購入プラグインもありますが、「インターネットが必要」、ハッキング可能(暗号化されたファイルでも100%安全ではない)、またはこのコメントの詳細のいずれかです。
Draco18s


-1

PlayerPrefsは、構築するプラットフォームに関係なく「機能する」ように設計されたK / Vストアです。説得力のある理由がない限り、それを使い続けてください。


PlayerPrefsを使用しない説得力のある理由ある場合(はい)、質問はほとんどだったと思います。このように、質問に答えていないので、私はこの答えを否定しました。
ピーター-アンバンロバートハーヴェイ

-1

最善の方法はサーバー側の節約ですか?保存に必要なすべての情報をJSON文字列に変換し、それをmysqlサーバーに文字列データとして保存し、ロードする必要がある場合、サーバーに接続して復元しますか?


4
これは質問に対する答えではありません。質問がある場合は、新しい質問として尋ねてください。
Souravポール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.