スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
前回は自作ゲームのサンプルとしてシンプルな鬼ごっこを作った!これをオンラインゲームエンジンを使ってMMO化していく手順をやっていこうと思う。
ここで手順を押さえておけば、次はキミ自身のゲームをMMO化することも可能だ。そんな大いなる一歩を一緒に行こう!
今回の目標「オンライン鬼ごっこを作る」
前回作った鬼ごっこの仕様を改めて確認しておくね。
- プレイヤーは緑
- エネミーは赤
- プレイヤーはエネミーから逃げれば逃げるほどポイントが貯まり、体のサイズが大きくなっていく。
- プレイヤーはエネミーに触れるとポイントがリセットされて、体のサイズが元に戻る。
- エネミーは不規則に動きつつも、ときどきプレイヤーめがけて急襲してくる。
こういう一人用の鬼ごっこゲームを作った。これをMMO化していくにあたって、以下の要件を加えていこうと思う。
- 別プレイヤー用のフレンドというスプライトを作る(オンラインゲームエンジンを使う)
- フレンドは水色
- エネミーは各プレイヤーごとにローカル表示される。つまり今回はエネミーはオンライン化の対象外。
- フレンドも逃げる時間が長いほど体のサイズが大きくなる。
ゲーム内容自体はシンプルさを重視しているから、まぁこんなところかな。
オンラインゲームエンジンをバックパック化する
いきなり本題だよ。さっそくMMO化を進めていく。
まずは、鬼ごっこではなくて、オンラインゲームエンジンの作品を開こう。
オンラインゲームエンジンを作ってない!という人は
- このシリーズの①から一緒に作ってからここに戻ってくるか
- シリーズの⑩番目の記事を開いて、そのサンプルプロジェクトをリミックするか
どちらかの方法でオンラインゲームエンジンをゲットしよう。
プロジェクトをいじるので、プロジェクトのコピーを作っておくことをおすすめする。
自プレイヤーを選ぶ
そしてスプライト「自プレイヤー」を選ぼう。
不要なブロックを削除する
めっちゃ消すw
最終的には↓こんな感じ。
クラウドプレイヤーにコピペする
このブロック群をスプライト「クラウドプレイヤー」にまるっとコピーする。
ドラッグアンドドロップでスプライトにまるっと持っていこう。
スプライト「クラウドプレイヤー」側にブロック群がコピーできたか確認しておこう!
バックパック化する
こんどはスプライト「クラウドプレイヤー」をまるごとバックパックに追加するぞ。エディター下部の「バックパック」という部分をクリックして開けてから、スプライトをドラッグアンドドロップだ。
これで一区切り!オンランゲームエンジンをバックパック化することに成功したぞ!
オンラインゲームエンジンを移植する
さぁ、いよいよ鬼ごっこのオンラインゲーム化に挑戦だ!オラ、ワクワクすっぞ!
まずは鬼ごっこプロジェクトを開こう!中を見るでエディタを表示しておく。
バックパックからクラウドプレイヤーを追加する
さっきバックパック化したクラウドプレイヤーを取り出して、スプライトのところにドラッグアンドドロップしよう。
よし、いい調子だ!
ニセモノのクラウド変数を消す
変数のところを見てみよう。おお、クラウド変数がバシッと追加されてる!と思いきや、実はこれニセモノなんです……。(でも、まだ消さないでね)
ニセモノだという証拠もあります。この作品のプロジェクトページを見てみると……あるはずの「クラウド変数」宣言がないんです。
これは由々しき事態ですな。
消しましょう。あ!待って!消さないで!w
実は消し方にもコツがある。そのままサクッと消すと変数を使っている場所も消えてしまって大変なことになってしまうのだ。
恐怖しかない!もはや作り直しといっても過言ではないレベルで手間だね。
ステージ「背景」を選ぶ
こんなときはいったん落ち着いてステージをクリックしよう。
ステージ内でクラウド変数を消す
ステージが選択された状態で、さっきのニセ変数たちを一掃しよう。
最終的には↓こんな感じでスッキリする。
あ!まだクラウドプレイヤーは開かないでね。ステージのままだよ。いまクラウドプレイヤーを開くと、またニセ変数が復活しちゃうからね。
クラウド変数を作り直す
いま消したクラウド変数を1から8まで作り直そう。
クラウド変数にチェックを入れ忘れないでね!8回も繰り返してると1回くらい忘れちゃうこともある。
僕は2回忘れてたw
クラウドプレイヤーを確認する
よし、あらためてクラウド変数を8個作り直したあとなら、クラウドプレイヤーを確認してもニセ変数は復活しないぞ。見てみよう。
おっけい!
クラウド変数の中身はチェックしないから、変数を表示するチェックマークは外しておいてOKだよ。
バックパックからメイン処理を取り出す
スプライト「クラウドプレイヤー」には使われてないブロック群を追加しておいたよね。あれを鬼ごっこのメインループ内に追加しようと思う。ドラッグアンドドロップで追加しよう。
ちなみにどのスプライトに追加するかという判断基準は、位置情報を共有したいスプライトはどれか、って考えるといいと思う。
クラウドプレイヤー側ではこのブロック群は使わないから削除しちゃっていいよ。
鬼ごっこ独自のデータをクラウド変数に追加する
おし、ここから本番だ!いまのクラウドプレイヤーは(プレイヤーUID以外に)X座標とY座標という位置情報だけを共有するシンプルな作りになっているよね。
でも鬼ごっこには位置情報以外にもポイントという独自のデータもあって、これもクラウド変数で共有しなくてはならない。
今回の鬼ごっこではポイントというデータだけだけど、みんなの作品の中にはもっと所持アイテムとかレベルとか装備とか、他にもスキルとかとか、いろんな情報があるかもしれないね。でも全部ここから学ぶ方法で同じように追加すればクラウド共有できるから引き続き一緒に見ていこう。
プレイヤーのメインループにクラウド処理を追加する
まずは今しがたコピーしたブロック群を、プレイヤーのメインループ内に組み込もう。すでに「ずっと」ループはあるから、それ以外のブロックをバラバラに追加していくよ。
「クラウド - セットアップ」を追加する
メッセージ「クラウド - セットアップ を送って待つ」は、最初のところに追加するぞ。
↓こんな感じになる。
座標情報を追加する
X座標とY座標を送信用データに追加するブロックも追加する〜。
↓こんな感じになる。
X座標とY座標に変数「スピードX」と「スピードY」が加えられた後に追加すればOKだよ。
「クラウド - ティック」を追加する
このメッセージも続けて追加してしまってOK。今回は続けて追加するけど、追加場所の判断基準としてはリスト「★送信用データ」に追加予定のデータをすべて追加した後に、このメッセージを送る感じだよ。
だからもしキミの自作ゲームでは複雑な計算をしてから送信用データを作り込むなら、その処理が全て終わって送信用データが整ってからメッセージ「クラウド - ティック」を送るようにしよう。
独自データ「ポイント」を共有する
さぁ、これだよね。ポイント。ポイントも送らないとね。鬼ごっこ独自データを送信用データに追加するぞ。これが成功すれば自作ゲームのMMO化が近づくぞ。
送信する
そのままスプライト「プレイヤー」にて送信用データにポイントを追加しよう。
ゆーてもコレだけかい!w
まぁポイントの計算はすでに終わってるしね。追加するだけならこれだけだわな。
受信する
ただ送信も重要だけど、受信も大切だよね。
クラウドプレイヤーを選ぶ
クローンティックを見つける
だいぶブロックが多いから見つけにくいけど、ブロック定義「クローンティック」を見つけよう。
↑こういうブロック群。
デコード処理を追加する
XとY以外にもポイントが送信されてくるので、最後尾にデコード処理を追加する。
大きさを変える処理を追加する
変数「値」にはポイントが入っている手はずなので、コレを使ってクラウドプレイヤーの大きさも変えよう。
いえす、これでデータ的なことは整った!ためしに2つ並べて動かしてみよう。
あとは見た目を変えたい!
フレンドに変える
クラウドプレイヤーのスプライト名をフレンドに変えようか。
コスチューム
めちゃカンタンに四角い水色作るwせめて目もつけるか……。
描くのが苦手な人はここからダウンロードしてファイルをコスチュームにアップロードしてくれ。
もともといるスクラッチキャットのコスチュームは削除してOK。
テスト
よし、これでテストぉ!
うん、動きは問題ない。けどフレンドと自分の重なり方が微妙。
自分を前に出すようにしようかな。
自分を最前面にする
プレイヤーを選択してから最前面になるようにブロックを追加するよ。
これでオーケー!
フレンドも時間が経つと大きくなるようになってるね!やったぜ!
まとめ
今回はソロプレイ用の鬼ごっこを、途中からMMO化するというチャレンジに挑戦したぜ。
ココまで作り上げてきたオンラインゲームエンジンを実践的にカスタマイズする方法のキホンがわかったと思う。
大切なのは結局のところ以下のようになるかな!
- バックパック化したクラウドプレイヤーを自作品に追加する
- メインループに
- メッセージ「クラウド - セットアップ」を加える
- メッセージ「クラウド - ティック」を加える
- 自作品特有のデータをリスト「★送信用データ」に追加する
- クラウドプレイヤーのブロック定義「クローンティック」にて、自作品特有のデータをデコードして処理する
大まかなカスタマイズの流れはこんな感じだね。バックパック化は今回やったから次からはすでにバックパック化してあるクラウドプレイヤーを使えばいいだけだから、そこは楽だね!
複雑なプロジェクトのオンライン化手順を知りたい人はグリフパッチさんの動画をチェックしてみてくれ!
- ① クラウド変数の使い方
- ② エンコードする
- ③ デコードする
- ④ マイナス値に対応する
- ⑤ バッファリングを実装する
- ⑥ 別プレイヤーを検知する
- ⑦ プレイヤーを管理する
- ⑧ クローンを使おう
- ⑨ スケールアップする
- ⑩ 退場処理を作る
- ⑪ 自作ゲーム「鬼ごっこ」を作る
- ⑫ MMO鬼ごっこに改造する (いまここ)
- ⑬ クラウド変数でユーザー名を共有する方法
質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。