ペットに乗ると体が遅れてついてくる:Java 版は「乗せる」、統合版は「運ぶ」の二本立てで直した

この記事でわかること
- ペットに乗ると体が遅れて見えた原因(統合版の直しの副作用)
- Java 版と統合版で「見せる体」を分けるという直し方
- 撮影用サーバーで直す前と後を撮りくらべる確かめ方
- 遊んでいる人がいる本番に、安全に入れかえる手順
ラクガキ街では、ブロックで描いた絵がそのままペットになり、背中に乗って走れます。オープンして数日たったころ、Java 版で遊んでいる住民の人から「ラクガキの表示がおかしい。前に統合版で起きていた、ブロックの表示が遅れるのに似ている」という報告が届きました。
この記事は、その「乗ると体が遅れてついてくる」不具合の原因と、Java 版と統合版で見せ方を分けて直したときの記録です。一つの直しが別の機種で副作用を起こす、という、Java 版と統合版の両方を受け入れるサーバーならではの話でもあります。
報告を聞いて最初に疑ったのは「サーバーが重い」だった
「表示が遅れる」と聞くと、まずサーバーの処理が追いついていないのでは、と考えます。そこで本番サーバーの様子を見ましたが、処理のペースは満点で、エラーも出ていませんでした。そのとき入っていたのは 3 人です。サーバーそのものは元気でした。
次に思い出したのが、少し前に統合版のために入れた直しです。ラクガキのペットは、たくさんのブロックの「見た目だけの表示」を組み合わせてできています。もともとは、その表示を見えないモブに乗せて動かしていました。ところが統合版では、乗せた表示が全部 1 か所に重なってしまい、ペットがひし形の板につぶれて見えました(くわしくは 統合版でラクガキがつぶれた話)。そこで、乗せるのをやめて、毎回モブのいる場所へ運ぶ作りに変えていたのです。
この「運ぶ」作りは、統合版の人だけでなく Java 版の人にも同じように効いていました。乗せている間は、表示はモブとぴったり一緒に動きます。運ぶ作りだと、モブが動いたあとに表示が追いかける形になるので、どうしても少し遅れます。ペットに乗って走ると、自分の視点は先に進むのに、体があとから追いかけてくるので、ずれやガタつきがいちばん目立ちます。
もう一つ気になったのが数です。そのとき本番にあった体のブロックの表示は 5,000 個あまり。これを毎回運ぶための合図が、Java 版の人の画面の重さにもつながっていそうでした(ここは確かめたわけではなく、見当です)。
「乗ったときの話ですか?」を先に確かめた
原因の見当がついても、すぐには直しませんでした。同じ「表示がおかしい」でも、動かない置物や家具がおかしいのなら、まったく別の原因だからです。報告してくれた人に「ペットが動いたり乗ったりしたときに、体が遅れてついてくる・ガタガタする、で合っていますか?」と聞いてもらい、「乗ったときなどの話」という答えをもらってから直しに入りました。
「何が」「どんなときに」おかしいのかを 1 つだけ確かめると、ちがう所を直してしまう遠回りが減ります。不具合の報告は、たいてい言葉が短いので、こちらから選べる形で聞くと答えてもらいやすいです。
直し方:見せる体を、人によって分ける
「乗せる」と「運ぶ」は、どちらかが正解というわけではありません。Java 版では乗せるほうがきれいに動き、統合版では運ぶほうしか形が崩れない。それなら、両方を用意して、見る人によって出し分ければいい、と考えました。
- Java 版の人には、体のブロックを前と同じように見えないモブに「乗せて」見せる。モブとぴったり一緒に動くので、遅れない。
- 統合版の人には、同じ形の体をもう 1 組作り、今までどおり「運ぶ」作りで見せる。
- それぞれの人には、自分の機種用の体だけが見える。もう片方の体は、その人の画面には送らない。
体のブロックの数は 2 倍になります。最初は「5,000 個が 10,000 個になったら、もっと重くなるのでは」と心配しました。ただ、1 人の画面に届くのは自分の機種の分だけなので、1 人あたりの量は増えません。サーバーの中で持っている数が増えるだけです。
撮影用サーバーで、直す前と後を並べて撮った
直したものを、いきなり本番には入れません。ラクガキ街には、本番のワールドを写して動かす撮影用サーバーがあり、そこで台本どおりに動く撮影用のキャラクターを使って試せます(撮影のしくみは 撮影用クライアントの記事 にまとめています)。今回は「ペットに乗って、草原を走ったり回ったりする」試しの台本を足して、今の本番と同じ版と、直した版の 2 回撮りました。
1 枚の絵だと違いがわかりにくいので、同じ場面を 1 秒ずつ並べてみます。見てほしいのは、乗っている人と、赤い体の位置の関係です。
左右に並べた動画は、半分の速さにすると違いがはっきりわかりました。直す前は体が人に対して前後左右にぶれ、直したあとは体がいつも人の真下にあって、ぶれません。
撮るまでにつまずいたこと
実は、この比べる動画を撮るまでに 2 回失敗しています。
- 録画が空っぽだった。撮影用のしくみには「ワールドだけを撮る方式」と「画面ごと撮る方式」があり、今回の台本は前者につないでいませんでした。画面ごと撮る方式に変えて撮り直しました。
- 画面がぼけていた。サーバーに入ったときに出る「リソースパックを使いますか」の確認画面が出たままで、その後ろでゲームが動いていました。台本の最初でこの画面を閉じるようにしました。
どちらも、撮れた動画を自分の目で見るまで気づけない種類の失敗です。「撮れたはず」で次に進まず、必ずコマを取り出して見るようにしています。
遊んでいる人がいる本番に、どうやって入れたか
プラグインを入れかえるには、サーバーの再起動が要ります。直し終わったとき、本番では 3 人が遊んでいました。再起動すると全員が一度切れてしまうので、すぐには入れかえません。
代わりに、「だれもいない状態が 2 分続いたら、自動で入れかえて再起動する」待ち役を動かしました。入れかえる前の jar は写しを取っておき、何かあればすぐ元に戻せるようにしています。この日は夜中の 1 時半ごろにだれもいなくなり、そこで入れかわりました。再起動のあと、ラクガキ王国のプラグインがエラーなく起動したこと、サーバーの処理のペースが満点のままであることを確かめています。同じ再起動で、家具に座る高さとペットに乗る高さの直し(座る高さの記事)も一緒に入れました。
この「撮影用サーバーで試す → だれもいないときに入れかえる → 前の版を残しておく」という流れは、ラクガキ街でいつも使っている決まりです。理由や細かいところは サーバーを守るためにしたこと に書きました。
残っていること:統合版の見え方は、自分では確かめきれていない
今回の直しで、統合版の人の見え方は「今までと同じ作り」のままです。ただ、自分の撮影用のしくみは Java 版なので、統合版の画面での見え方は直接は確かめられていません。統合版で遊んでいる人に、ペットに乗ったときの見え方を一度見てもらうようにお願いしています。
この不具合から学んだこと
いちばんの学びは、「ある機種のための直しは、ほかの機種にも効いてしまう」ということです。統合版でペットがつぶれる件を直したとき、Java 版で見て「形は崩れていない」ことは確かめていました。でも、乗って走ったときの動きまでは見ていませんでした。止まっているときは正しく見えても、動かすと違いが出ることがあります。
それからは、ペットや家具の見た目にかかわる直しを入れるとき、次の 3 つを撮影用サーバーで撮るようにしました。
- 止まっているところ(形が崩れていないか)
- 動いているところ・乗っているところ(遅れ・ずれがないか)
- 直す前と後を左右に並べた動画(違いが目で見てわかるか)
Java 版と統合版を一緒に遊べるようにすると、遊べる人は一気に増えます。そのかわり、見え方を 2 通り考える必要が出てきます。片方で直したら、もう片方でも必ず見る。当たり前のようで、実際にやってみて初めて身にしみた決まりです。