はじめに
photonとは、Exit Gamesが提供するマルチプレイヤーゲーム用の通信フレームワークサービスの総称で、photon Realtimeやphoton Fusionなどいくつか製品が存在し、無料で使えるフリープランも用意されています(katteni Direct Marketing)。
2022年5月21日にSiv3D@0.6.4がリリースされ、Siv3D内でphoton Realtime SDKと連係したコードを書ける公式アドオンが追加されました。
…が、実は僕(たち)はそれ以前のSiv3D@0.6.2の頃、いろいろあってこのアドオンの開発者さんと連絡をとり、未完成のβ版を使わせていただいたことがあったので、その時作ったゲームの概要を紹介しようと思います。
また、最新のSiv3D@0.6.15 & 公式アドオン環境への移植については、作ったのが2年前でありあれそもそもおれなにかしてたっk
中身をすっかり忘れてしまい解読作業から始めているため作業が終わっておらず(というかほぼ書き直し状態)、先日のSiv3D京都実装会にて移植するより自分で2を作ろう、という話になって今鋭意制作中なのでここではその話は省略します。
作ったもの(3年前)
動作するバイナリは残っていたので、Releaseからぜひ遊んでみてください。
1 vs 1の2D陣取りゲームを作りました。
マップ
- マップ(迷路)はランダムに自動生成される
- 基本視点は見下ろし型で、自分の周囲しか見えない
- マップ上を歩くことで地面を塗り進める
- 移動速度は敵陣の塗り返し < 中立地帯塗り < 自陣移動
- 全体マップには塗った自陣だけが表示され、リアルタイムに更新される
- 相手とぶつかると両者ランダムな地点にワープ
目的
- より多くのマスを塗り、迷宮を脱出すること
- ゴール(出口)の上に立ち、Enterキーでゴールする
- 素通りして、もっと塗ってからゴールする戦略も○
- 一方がゴールすると制限時間短縮 & ゴール出来ないと最終陣地数にペナルティ
- 後からゴールしたことによるペナルティは無し
アイテム
- マップにはアイテムが落ちていて、拾うと任意のタイミングで使える
- バフは自分に、デバフは相手に適用される
- アイテムの種類は以下の通り:
- 移動速度バフ・デバフ
- 視界バフ・デバフ
- ゴールへの方向表示
- 相手プレイヤー位置への方向表示
- 方向表示系はコンパスのような感じで、効果時間中はリアルタイムで更新
- 効果時間は10秒、ゴール方向表示のみ5秒
リザルト
- 塗ったマス数(+ ペナルティ)で勝敗が決まる
- 全体マップでの早送りリプレイ、使用アイテム数が表示される
実装
実装の解説は軽くに留めます、もう覚えてないので
オンライン通信
イベントコードによる場合分けを多用しているため、かなり可読性が低くなってしまっていますが、これらのデータを相手クライアントに送っています。
- 自プレイヤーの位置のPoint(毎フレーム)
- デバフアイテムを使ったという情報
- アイテムを使い切ったという情報(リザルトのアイテム履歴のため、全アイテムで送る)
- 自視点のマップGrid( = 自陣の情報)
- ちょっとした工夫として(先輩による実装)、マップのGridをそのまま送るのではなく文字列に圧縮してから送るようにしています。
リザルト
リザルト画面のリプレイ表示は、単純にマップのGridを毎秒Arrayに保存し、それを呼び出すという力技で解決しています。
おわりに
せっかくの(恐らくは)初Siv3D x Photonゲームなので、2作って復活させたいね