オンラインゲームを作りたい

ツバメ

ユーザー
初めまして。出来ればVX AceかMVで、オンラインゲームが作りたいです。
@krmbn0576様のオンライン通信してアバターを表示するプラグインを使ってみようとしましたが、どうやらFirebaseとの互換性が悪くなったのか使えずに困っています。
恐縮ですが何かしらアドバイスなどいただけたら幸いです。例えば他にこのようなプラグインがある、こうすれば模倣できる、ここら辺を変えれば現在のFirebaseに対応できる、など。
ついでに他のシリーズ(MZ)も使用視野に入れてお願いします。
 

まるまる

ユーザー
ツバメさん

こんにちは  
まっくす さんをご存知でしょうかツクールMVでオンラインゲームを制作されているらしいです。
10時間程の制作風景を公開しているのでもしかしたら何か解決のヒントがあるかもしれません。
参考になれば幸いです。

 
ゲームアツマールでの投稿なら、アツマール API関係のプラグインがあります。

ただ、マルチプレイの作品を目指すのならAkashic Engineを用いることをお勧めします。
 

chronicle

ユーザー
Firebaseは公開サービスなため、セキュリティ上色々問題が出てくるので厳しくなったりしていますね。
仮に利用出来たとしても、開発中の無料体験みたいな意味合いが強いので、実際にオンラインゲームとしての通信量を考えると年10万とかでも安いというような感じです。
まずこの通信量がオンラインゲームの仕様上どの程度発生して抑えるならどうやって通信の仕組みにするかが必要になります。

ツクールで製作する場合にも、例えばキー入力後スイッチをオンにして、指定されたイベントが動作するというのを作っているとします。
それをオンライン化した場合に、4人プレイヤーがいる時の複雑さは16倍(ローカル上とオンライン上の4x4)になります。

  • プレイヤーAがキー入力しスイッチをオンにした
  • プレイヤーA内で対応イベントを実行
  • 通信が届いた後、プレイヤーB~Dで対応イベントを実行
  • ほぼ同時にプレイヤーBもキー入力しスイッチをオンにした
  • プレイヤーBでは、プレイヤーAが実行しているものと、自身が実行しているものがある
  • プレイヤーAでは、自身が実行しているものと、通信が届いた後、プレイヤーBが実行したものがある
  • プレイヤーC・Dでは、通信が届いた後、プレイヤーA・Bが実行したものがある

この間には、通信上のラグやイベントの処理のタイミング、負荷、一瞬切断状態なども加わるので、
例えばプレイヤーCでは実行されていない状態で進んでいってしまう場合もあります。
まずこの設計が出来ていないと、デバッグすら出来ないです。

という所が、根本的に制作の仕方が変わってしまうので、普通にツクールで制作するノウハウは役に立たなくなります。
制作方法の解説も質問しても答えられる人もいなくなるので、自力で身につけるしかないですね。

ツクールで自作システムや自作戦闘をつくり、数十時間プレイ出来るゲームを制作出来ても、オンラインゲームを作るのが難しい理由です。

オンラインゲームのしくみについて参考になる本です。
レビューにもある通り、オンラインゲームのしくみについてがメインなので、Unity部分は読み飛ばして問題ありません。
 

ツバメ

ユーザー
ツバメさん

こんにちは  
まっくす さんをご存知でしょうかツクールMVでオンラインゲームを制作されているらしいです。
10時間程の制作風景を公開しているのでもしかしたら何か解決のヒントがあるかもしれません。
参考になれば幸いです。

ありがとうございます!
まっくす さんのゲーム、調べさせていただきましたがどうやらくらんぼん様のプラグインを使用しているようでした。
どうやら今は難しいようです。
 

ツバメ

ユーザー
ゲームアツマールでの投稿なら、アツマール API関係のプラグインがあります。

ただ、マルチプレイの作品を目指すのならAkashic Engineを用いることをお勧めします。
ありがとうございます。なるほど、Akashic Engineですね。サイト見させて頂きました。
視野に入れてみようと思います。
しかし恐縮ですが、API関係のプラグインとは何でしょうか。
すみません、説明して下さると幸いです。
 

ツバメ

ユーザー
Firebaseは公開サービスなため、セキュリティ上色々問題が出てくるので厳しくなったりしていますね。
仮に利用出来たとしても、開発中の無料体験みたいな意味合いが強いので、実際にオンラインゲームとしての通信量を考えると年10万とかでも安いというような感じです。
まずこの通信量がオンラインゲームの仕様上どの程度発生して抑えるならどうやって通信の仕組みにするかが必要になります。

ツクールで製作する場合にも、例えばキー入力後スイッチをオンにして、指定されたイベントが動作するというのを作っているとします。
それをオンライン化した場合に、4人プレイヤーがいる時の複雑さは16倍(ローカル上とオンライン上の4x4)になります。

  • プレイヤーAがキー入力しスイッチをオンにした
  • プレイヤーA内で対応イベントを実行
  • 通信が届いた後、プレイヤーB~Dで対応イベントを実行
  • ほぼ同時にプレイヤーBもキー入力しスイッチをオンにした
  • プレイヤーBでは、プレイヤーAが実行しているものと、自身が実行しているものがある
  • プレイヤーAでは、自身が実行しているものと、通信が届いた後、プレイヤーBが実行したものがある
  • プレイヤーC・Dでは、通信が届いた後、プレイヤーA・Bが実行したものがある

この間には、通信上のラグやイベントの処理のタイミング、負荷、一瞬切断状態なども加わるので、
例えばプレイヤーCでは実行されていない状態で進んでいってしまう場合もあります。
まずこの設計が出来ていないと、デバッグすら出来ないです。

という所が、根本的に制作の仕方が変わってしまうので、普通にツクールで制作するノウハウは役に立たなくなります。
制作方法の解説も質問しても答えられる人もいなくなるので、自力で身につけるしかないですね。

ツクールで自作システムや自作戦闘をつくり、数十時間プレイ出来るゲームを制作出来ても、オンラインゲームを作るのが難しい理由です。

オンラインゲームのしくみについて参考になる本です。
レビューにもある通り、オンラインゲームのしくみについてがメインなので、Unity部分は読み飛ばして問題ありません。
なるほど、分かりやすい説明ありがとうございます。本、検討してみたいと思います。
 

ツバメ

ユーザー
それでは少し新たな質問となるのですが、「定期的に『スイッチ』『変数』情報を共有する」というプラグインは作ることが可能でしょうか。
自分のゲームはターン制なので、それだけでも十分助かるのですが……。

つまりchronicle様のおっしゃる通りちゃんとしたオンラインゲームなら莫大な通信量が必要ですが、「スイッチ」「変数」のみを継続的にではなく「定期的に」(イベントコマンドとして) 共有するのなら、そこまで通信量が必要ないのではないか、という質問です。
 
最後に編集:

まるまる

ユーザー
これを言ってしまったら元も子もないと思うのですがツクールでオンラインゲーム制作は向いてない気がします。
ある程度プログラミングを習得されているのでしたら情報が多いツールで制作するほうが無難だと思います。

少し調べたところUnityとPhotonでオンラインゲームの制作記事が多数ヒットしました。
公式でも日本語チュートリアルもあるようなので、ターン制ゲーム希望でしたらカードゲーム等から
始められてはいかがでしょうか。ツクールでオンラインゲームを作るよりも情報が多いかと思います。

またツクールみたいなマップチップが良い場合でも探せば無料で別ツール利用可のオリジナルマップチップが結構あったりします。
プログラムに理解があるのでしたらツクールで制作されるよりも別の選択をしたほうが上手く行くような気がします。
参考になれば幸いです。

参考記事をいくつかリンクします。
ゲームが作りたい!!オンラインゲームの作り方全体像

Photonについて大まかに理解するために見たページまとめ

【CEDEC 2014】わずか2ヶ月でリアルタイムバトルを実装可能に! 『聖剣RoM』で見せたPhoton Serverの実力とは?

pun2(photon unity networking 2)で始めるオンラインゲーム開発入門

Unityでオンライン対戦カードゲームやボードゲームを無料で作ろう!

無料ブラウザゲームPhotonオンライン対戦「犬猫将棋」

Photon公式サイト
 
最後に編集:

ツバメ

ユーザー
参考にしてみることにしますが……プログラミングはそこまで得意ではない上ゲームシステムが非常に複雑なので、出来ればやはり慣れ親しんだツクールで作りたいです。
どうしても無理でしょうか。
 

chronicle

ユーザー
ちゃんとしたオンラインゲームなら莫大な通信量が必要ですが
この前提が違います。

オフラインのRPG制作ツールであるRPGツクールで、アバターを表示するプラグインを使用してツクール感覚で制作した場合は通信量が考慮されていないので無駄が多くなるという事です。
このプラグインもオンラインゲーム用に作られていなく、アバターの表示も変数やスイッチもオフライン仕様のツクールと同じ仕様です。
(オンラインゲームでは行わない処理になる)

莫大な通信量が必要となったら、送受信の処理負荷とゲームへの反映、通信の遅延も大きくなり、まともにオンラインゲームとして動作しなくなります。

そもそもオフラインのRPG制作ツールなので、ちゃんとしたオンラインゲームは作れません。

それでは少し新たな質問となるのですが、「定期的に『スイッチ』『変数』情報を共有する」というプラグインは作ることが可能でしょうか。
自分のゲームはターン制なので、それだけでも十分助かるのですが……。

これだけの情報量だと何もわからないです。

このままの質問の意味だと、【変数1:999, スイッチ1:ON・・・等】というのをチャットで送り合ってそれぞれ反映させるのと機能的には変わらないです。
チャットだと履歴も送信者のわかりますが、単にツクール上でのスイッチ・変数の概念を利用すると、それすらもわからなくなります。

オンラインゲームなので通信相手の概念もありますし、ゲーム性によっても変化します。
人数もどのように共有するかもどの程度の量になるのかもわかりませんし、全体で一つを共有するのと個別の状態を共有するのとでも全く意味が違います。
プレイヤーの識別も接続状況も不要なゲームシステムなのでしょうか。

>継続的にではなく「定期的に」
一定間隔で継続的な通信が発生するわけですが、この違いは具体的になんですか?
 

chronicle

ユーザー
ツクールで制作するのは、概念的にも構造的にも難しい所があります。

ツクールもプラグインもオンラインで使われる事は想定していないので、スクリプトとして悪意あるコードを実行されてしまいます。
アツマールであれば企業として、ウィルスやパスワードを盗んだりしにくくなっているで安心ではあります。

他にはざっくりと
  • イベントとスイッチ・変数の概念しかない
    • 複数のプレイヤーや接続状況の概念もないので、その概念の実装
  • イベントは順次動作する
    • イベントはマップ上でのみ動作
    • 並列処理以外のイベントは、一つずつしか動作しない
    • データ受信に応じでイベントを動作させようとした場合
      • 基本的に全て並列処理で組む必要がある
      • メニュー画面も文章の表示等(キーを押さないと進まない)、完了までウェイトも基本的に使えなくなる
        • データ受信しても、イベントが動作しない
制作するにあたり
  • リアルタイムで動作するようなイベントを組むこと
  • オフラインでも、予期せずスイッチや変数の操作、イベントの動作が起こってデバッグが大変で、それとは比較ならないくらいの規模になること
  • 本来ツクールの制作で不要な知識やツクール自体の仕組みを知る必要が出てくること
実際もっと問題は山積みです。

オンラインっぽい(アツマールで言う非同期型)ものでツクールとは別にプログラムを組んでいけばなんとかなりますが。

アツマールの運営企業でもツクールでやるのは無理だから、Akashic Engineという独自エンジンを開発するくらいの難易度ですね。
 
最後に編集:
そもそも何がやりたいんですか?
MMORPGみたいなものが作りたいんだったらツクールでは無理かもしれません。

アプリゲームみたいに、他のプレイヤーが使うキャラを一時的に借りるみたいなことは
できそうですが。
 

ツバメ

ユーザー
確かにこれはゲーム概念の共有が必要かもしれませんね。

わたしは今、双六を作っています。元々オフラインで作っていたものなのですが、色々と不便な点があり、オンライン化をすることにしました。

わたしが考えているシステムはこのような感じです。今までツクールで甘んじていたところがあるので色々と拙いところがあることをご容赦ください。

各プレイヤーの行動に1分という制限時間を設けて行動を選択させ、変数化します。
→行動終了したら「スイッチ1-n」をONにしていき、プレイヤー数に応じた「スイッチ1」がONになった際、1分の制限時間を強制終了する「スイッチ2」をONにします
→「スイッチ1-n」をOFFにし、「スイッチ2」もOFFにします
→変数化した行動を元に、結果を各ゲームで再現します(他プレイヤーも変数で位置を再現します)
→再現が終了したらまた各「スイッチ1-n」をONにしていき、応じたスイッチが全てONになった際次のターンになる指令を出させる「スイッチ2」をONにします

簡単なことではないと思いますが、スイッチや変数をサーバーに置き、「スイッチ2」が変わった瞬間のみ通信させ値を共有する、ということがいいかなと思いました。
ついでにこの間はずっとイベント内の処理なのでプレイヤーは選択肢を選択するのみとなります。
本当に不勉強のままでシステムを作ってしまったのでツッコミどころもあるとは思いますが、いかがでしょうか。


まあできればチャットシステムとか欲しいですがそれは本当に無理そうなのであきらめるとします。
 
リアルタイム要素がかなり強そうなので、でしたらAkashic Engineを頑張って
習得したほうがいいと思います。

プレイヤーを募集する要素もあるっぽいので、ニコ生ゲームとして作るとか。
 

chronicle

ユーザー
必要な情報のみを必要なタイミングで通信するのがオンラインゲームの基本なので、こういうプロセスになりますね。
これを実装できれば、ちゃんとしたオンラインゲームになります。
再現というと、リプレイ的な意味になってしまうので、同じことをしたらそれぞれ同じゲーム進行になるという感じです。

n人という部分は、プレイヤーを識別して管理しないとですね。予め順番も決める必要も出てきます。
ゲームデザインとして考えると、一人でも離脱すると(エラー落ちや一時的な切断状態)進行不能になるので、対策も必要だと思います。

オンラインゲームのしくみの本はこれらを解説しているのと、Kindle版の試し読み出来る範囲で、
オンラインとオフラインは別ゲームというのも書かれています。

一先ずアツマールAPIのシグナルで試しながら実装してみるのがいいんじゃないでしょうか。
 

ツバメ

ユーザー
お二人ともありがとうございます!
リアルタイム要素がかなり強そうなので、でしたらAkashic Engineを頑張って
習得したほうがいいと思います。
やはりわたしはシステム的に自分が作りたいシステムを慣れていないAkashic Engineで作ろうとすると、挫折してしまいそうで、出来ればツクールで作りたいです……すみません。
必要な情報のみを必要なタイミングで通信するのがオンラインゲームの基本なので、こういうプロセスになりますね。
これを実装できれば、ちゃんとしたオンラインゲームになります。
再現というと、リプレイ的な意味になってしまうので、同じことをしたらそれぞれ同じゲーム進行になるという感じです。

n人という部分は、プレイヤーを識別して管理しないとですね。予め順番も決める必要も出てきます。
ゲームデザインとして考えると、一人でも離脱すると(エラー落ちや一時的な切断状態)進行不能になるので、対策も必要だと思います。

オンラインゲームのしくみの本はこれらを解説しているのと、Kindle版の試し読み出来る範囲で、
オンラインとオフラインは別ゲームというのも書かれています。

一先ずアツマールAPIのシグナルで試しながら実装してみるのがいいんじゃないでしょうか。

詳しい説明ありがとうございます! わたしとしても、大分対策をこうじて挑むつもりです。
それで……APIのシグナルとは具体的にどのような機能なのでしょう。
 

chronicle

ユーザー
具体的には試してもらった方が早いですね。
ツクールは悪意あるコードを実行される危険性もあるので、現実的にアツマールでしか選択肢がありません。
ただ、ある程度オンライン通信の仕組みがわかっている前提だと思うので、プラグインコマンドを利用しても難しいかもしれません。

一応MZの方がプラグインコマンドが使いやすいのと最新のバージョンに対応しやすいのでオススメします。

これ以上は、実際にツクールで組めるかもわかりませんし、時間的にもサポートは出来なくなります。
ピンポイントな質問やフロー図などがあれば反応するかもしれまん。
頑張ってください。
 
トップ