さてここで種明かし 奇妙な世界?の奇妙な?現象について考察してみましょう。 まず、世の中には ・ステータス変化を伴う、重要な動作 (攻撃・回復など) と ・ステータス変化を伴わない、重要ではない動作 (/emoteなど) の2つがあることを認識してください。 ■ベルが合わない・・・ ![]() ![]() ベルが合わないのは、単純に操作側の「ベルを鳴らしたよ」という情報が、FF11サーバを経由して「他のプレーヤー」に 伝わるまで時間がかかるせいです。一見ほぼ同時になっている時があるように見えますが、零点何秒というレベルで 動作は遅れて伝わっています。 ■どうして魔法が・・・・・・ では、魔法の詠唱が途中から早くなるのはなぜでしょう? 答えは「魔法の詠唱のスタイル」にあります。 魔法の詠唱はご存知のように2段階に分かれています。 ・最初に構えるだけのモーション(白魔法だと両手を広げているモーション) ・実際の効果を伴ったエフェクト(白魔法だと腕を天に突き上げているモーション) 見た感じでは、「最初に構えるだけのモーション」は操作者側のほうが必ず早く見え、 「実際の効果を伴ったエフェクト」は他プレーヤーから見える方が早い場合があります。 ![]() 「最初に構えるだけモーション」はステータス変化が伴わない、いわば「それほど重要ではない動き」なので ベルと同じように、「他プレーヤー」側には遅れて伝わります。 ただし、重要なのは「次にサーバ側で魔法の成功判定を行う」という動作があります。 これは「ステータス変化を伴う、重要な動作はサーバ側で成功判定を行っているから」です。 ゲームなどでよく使われる「判定」とは、ある行為に対して「○」か「×」かを決める儀式 のことです。 魔法の詠唱を例に取りましょう ![]() 例えば「詠唱中に移動をしなかった」という条件がある場合、サーバ側の魔法の成功判定は「魔法詠唱は成功した」と 判定します。 ![]() ところが「詠唱中に移動をしてしまった」という条件がある場合、サーバ側の魔法の成功判定は「魔法詠唱は失敗した」と 判定を下します。 これが「判定」です。 また、アクションゲームやシューティングゲームでよく聞く「当たり判定」は、 自分と他の物が接触したかどうかを判定します。 例えば「ミスラさんのOPに指が触れたかどうか」という判定があるとします。 (そして、触れていた場合、1機失うという動作があるとします。) ![]() 上の場合、感情的にはアウトのような気もしますが、サーバで決めた「アウトとなる領域」には指は入っていないため 誰がなんと言おうと、判定的にはセーフです。 ![]() ところが、調子こいたとしましょう。あぁこれはいけません。完全にセクハラです。 サーバで決めた「アウトとなる領域」にも指が入っているため、判定的にはアウトです。 ![]() こうして(管)君は(社会的に)1機失うこととなりました。 なぜ「ステータス変化を伴う、重要な動作はサーバ側で判定を行っている」のか? もうお分かりですね? サーバ側で判定を行わないと、いくらでも不正ができるからです。 ![]() これでは何が正しいのか分からず、ミスラさんが1機失うことにもなりかねません。 それゆえ、サーバ側での判定は、世界の均衡を保つために無くてはならない動作なのです。 話を元に戻しましょう。 ![]() 「実際の効果を伴ったエフェクト」は他プレーヤーから見える方が早い場合がある、のは サーバ側での判定結果を各プレーヤーに伝える動作をしているためです。 この時、優先順位が決まっているわけではないので、多少の時間のズレが発生する場合があります。 他プレーヤーの方が情報を早く受信した場合、実際の詠唱者よりもモーションが早く見えることになります。 ここでちょっと実験。 詠唱途中に回線が切れるとどう見えるか・・・・? これをご覧ください。 ![]() 【動画を見る】 【動画を見る(テレポバージョン)】 他プレーヤーから見ると魔法は成功したように見えるのに、詠唱者側では詠唱し続けているように見える・・・・・・? 絵にすると以下の通りです。 ![]() まず最初に詠唱を行いますが、ここで回線を切断してしまいます。 ![]() ここでワザと詠唱者が移動を行って、魔法の詠唱を中断させようとしましょう。 しかし、回線が切れているので「サーバ側」には移動したという情報は伝わりません。 そのため、サーバは「移動しなかったもの」とみなし、「魔法の詠唱は成功した」と判定し、他プレーヤーに 情報を伝達します。 詠唱者側は回線が切れているので、魔法の成功判定の結果が伝わってこないため まだ詠唱中のように見えます。 ![]() ここで回線を復活させましょう。 すると、サーバ側からは「詠唱に成功した」という結果が操作側に送られます。 また、詠唱者側からは「移動した」という情報がサーバに送られるので、他プレーヤーからも 移動したという状態が見えるようになります。 ■動かないタルタル・・・・・・ ![]() キャラクターは現在の位置と、向いている方角をサーバに送信します。 しかし、この位置情報は(おそらく)一定間隔でしかサーバに送信されないので、 非常に短い時間でチョコマカ動いたという情報は、カットされた状態で他のプレーヤーからは見えます。 ■剣の振りが・・・・・・ 武器の振り方も何パターンかありますが、これも非常にどうでもいい情報です。 「攻撃が成功した」という判定をサーバから送られてくるので、それをプレーヤー側でランダムで適当な 剣の振り方にして表示させています。「だれそれが攻撃した」ということが重要なのであって、 振り方なんてどうだっていいのです。 なぜこのように「プレーヤー側の処理」と「サーバ側の処理」に分かれているかというと、 重要な情報(キャラクターのステータス)はサーバ側で一元管理する必要があるからです。 自分のクライアントと他人のクライアントでステータスの見え方が違っていたら大問題ですが、 剣の振り方が違うとかは、気にしない箇所、それこそ隣同士でプレイしていない限り 分からないような情報なので、このようにしているわけです。 オンラインゲームはできるだけサーバやネットワークに負荷をかけない作りになっているので、 できるだけ不要な情報は「省く」ことになっています。 (サーバ・ネットワーク負荷を抑制すればするほど、1ワールドに住むことができる人口が増すため。) また、たまに問題になる「移動ツール」などは、移動情報を勝手に書き換えたデータをサーバ側に 送信しているのです。そのため、やけに移動速度が速かったり、ワープしたりしているように 見えたりします。 (*最近では短時間に極端な移動を行うと検知されて、即お縄になるようです) おまけでちょっと面白い動画を載せておきましょう。 ■剣の振りが・・・・・・2 【動画を見る】 剣の振りが他プレーヤーのほうが速く見える動画です。 これは魔法詠唱と同じ話です。 ■スライディングナイト 【動画を見る】 これはβのころからある「スライディング」現象です。 他プレーヤーから見ると、間のモーションが省かれているために、スライディングのように見えます。 ■うしろさがり・タゲロック 【動画を見る】 【動画を見る】 タゲロックして後ろに下がると、他のプレーヤーからは普通に後ろに下がったように見えます。 これはコントローラー(キーボード)で「後ろ」と入力したものを、そのまま反映しているからだと思います。 止まる、または座る行為を行うと、向いている方角が更新されて、正常な方向に向くようになります。 以上、「真夏の怪談」と称しましたが、なんのことはない、処理の方法で見え方が 異なるよ、という話でした。作った方としてはそこそこ面白かったです。 しかし・・・このコンテンツ(最初の黒いところ)を作っている時に、スピーカーから怪音がしてマジでびびりました。 いやー、本当に違う世界に来たのかと思いましたよ。 元の世界に戻る。 |
||