ハッキング・チートからの保護
どのようなゲームも不正行為の危険にさらされています。ハックをひとつ防ぐことができても、新たなハックが生まれ、再度対策に悩まされることも少なくありません。
解決策として、すべてのロジックをサーバー上で実行すればいいように思いますが、非常にコストがかかるうえに保証することは不可能です。
保護のオプション
チート保護として4つほど方法が挙げられます。
- 100%クライアントサイド
- チート報告とバックエンド経由の禁止を伴うクライアントサイド
- 実行中のゲームのサーバーサイド分析
- 完全なサーバーサイド権限
各オプションはクライアントサイドからサーバーサイドになるにつれ効果が強くなりますが、同時にサーバーサイドで実行するロジックとシステムが増えれば増えるほどコストも上がります。
通常、2番目を推奨しています。2番目では、すべてのクライアントがチートチェックおよび報告を行います。何度も報告されたユーザーはゲームから追放・ブロックします(ハッカーを何度も報告するユーザーも含みます)。
この方法を採用すると、効果的にチートを行うユーザーを除外でき、またチーティングを防ぐごとができます。たやすくチートされなくなります(完全にではありませんが)。
アカウントまたはデバイスごとにユーザーを識別する必要があります。また、player.io、Playfab、Steamなどのバックエンドサービスで報告を保存および評価する必要があります。最後に、サーバーにアクセスするために認証をリクエストするようにPhotonゲームを設定する必要があります。
クライアントサイド
PUNとUnity
PUNは、サーバーロジックを必要としない100%クライアントサイド実装です。そのため、低コストですがチート対策ができません。
一部のゲームでは問題ありませんが、競争性の高いゲームでは対策が必要になります。
Unityビルドは、IL2CPPの使用とクライアントサイドでの追加ステップをいくつか実行してクライアントにハッキング対策を取らせておかない限り、かなりハッキングされやすくなっています。
Asset Storeのアンチチートツールに目を通してみてください。Anti Cheat Toolkitなどは一例です。
次のような記事のヒントも参考になります。: A practical tutorial to hack (and protect) Unity games
Photon Bolt
Boltには、サーバーがなくても不正行為を抑えるための組み込み機能があります。状態とすべてのメッセージを定義するため、任意の情報が挿入される可能性が低くなります。
Boltゲームをホストしているすべてのクライアントは、状態について権限を持つことができます。これは、任意のクライアント(ハッキングされていないのが理想)が全員の状態を確認できることを意味します。
また、Boltをヘッドレスモードで実行できます。これにより、専用マシンで実行する選択肢が生まれます。そのためには、PCを調整してそれらのインスタンスを実行し、プレイヤーがそれらを使用することを確認する必要があります(少なくとも一部のゲームでは)。
ゲームサーバーのデプロイと管理を行ってくれるサービスも存在します。一例として、UnityのMultiplayサービスが挙げられます。こちらと直接連携した経験はありませんが、Boltなら正常に動作するはずです。
## サーバー側の監視
PhotonサーバープラグインSDKを使用して「実行中のゲームのサーバーサイド分析」を実装できます。ゲームで中心となるオペレーションとイベントを修正できるため、いくらでもサーバー上でコントロールできます。
ゲームエンジン(またはゲーム全体)を実行するための組み込みのサポートがないため、サーバーはシーン/レベルまたはその他のデータにアクセスすることができません。そのため、この方法は「抽象的」でシーンに依存しないゲームに適しています。
最も望ましいのは、クライアントと同じゲームロジックをサーバー上で実行し、サーバーにクライアント用の状態アップデートを作成させることです。
自分で独自のカスタムロジックをホスティングすることも、Photonエンタープライズクラウドでご依頼いただくこともできます。
完全なサーバー権限
ゲームが「抽象的」でレベルデータを必要としない場合、Photon Server内で完全なサーバー権限を実装するのは比較的簡単です。
さまざまなシーンで物理を実行する必要がある場合、Photonで直接これを行うことは効率的ではないでしょう。
その場合、Photon Boltまたは他のエンジン内ホスト型の方法を使用するのが理にかなっています。
BoltにはFPSおよびTPSに対応する組み込み機能があります。また、サーバー権限モードがあり、マシンでホストすることも可能です。Unityの「マルチプレイ」サービスと組み合わせることができるはずですが、まだ実績はありません。
Back to top