6-2. 実装例②:クラスによる実装例

実装例②:クラスによる実装例

前項ではScoreManagerにより各Playerのスコア加算等の処理を統一的に扱う例を見ました。ゲーム中のプレイヤーに関するパラメータがスコアのみで済むシンプルなゲームであればそれで十分ですが、より複雑なゲームを作成する場合、プレイヤーには様々なパラメータや機能をもたせていく場合があります。
この場合は、その機能ごとにModuleを用意するよりも、Playerごとに管理できるオブジェクトが存在すると管理がしやすくなります。こちらではプレイヤーごとにオブジェクトを作成し管理する、オブジェクト指向の実践例を示します。

GamePlayerクラスの実装

という名前のModuleScriptを作成し、Playerの状態管理や機能をもたせたクラスを実装します。ここではScore以外にも機能がある例としてisDash というダッシュ状態の管理と機能も追加しましょう。
GamePlayerでは、プレイヤーごとのパラメータや状態の管理を可能とし、ここではスコアとダッシュ状態を例として実装しています。このインターフェースを利用することで、ゲーム中の様々な箇所からスコアやダッシュ状態を操作しても統一的な処理が可能となっています。

GamePlayerを管理するPlayerManger

GamePlayerのようなオブジェクトを生成する場合には、それをまとめて管理するManagerがあると便利な事が多いです。ここではモジュールを実装し、プレイヤーがエクスペリエンスに参加・退出した際に GamePlayerインスタンス を生成・破棄する処理などを実装します。

利用例

次に、このクラスを利用するサーバースクリプト例です。

ポイント

GamePlayerクラスの導入により、Player単位で管理したいパラメータ、機能は、GamePlayerオブジェクトにて管理・操作する、という形に統一され、Playerに関する操作や拡張が行いやすくなっています。
前項のScoreManagerによる実装では機能側で全プレイヤー分を管理しており、他の機能が出てきた場合また同様に全プレイヤー分の管理機構を実装する、という形になります。しかし、GamePlayerという「プレイヤーがもつべき性質をもったオブジェクト」を作ることでプレイヤーに関連する処理が効率的かつ明快に管理できています。
このようにクラスベースの設計を採用することで、コードの再利用性と整理が向上し、プレイヤーごとの状態管理が容易になります。