見出し画像

Cluster Creator Kit に今ないものの話

この記事は クラスター Advent Calender 2021 6日目の記事 でした。その前は tommy さんの戦いの歴史の話のはずです。
私は クラスター株式会社 のEngineチームの Unityエンジニアfaidra です。世界を救おうとしていたらカレンダーの日付を間違えてました。

cluster では Cluster Creator Kit というものを使って、cluster 上で利用できるワールド を作ることが出来ます。現在のCreator Kit でも 非常に多様なもの を作ることが出来ますが、しかしまだその提供できているものは完全とは言えません。
今回は、 Cluster Creator Kitの開発にあたって、こういう機能があると良さそうと話したり話さなかったりしたことの"一部"を書こうと思います (記事タイトルで内容を伝えるのは諦めました)。 一部って書いておくと他にもあるんだろうという期待を煽ることが出来ますね (一部の選び方は記事として面白いかどうかです)。

Aggregate (Player Aggregate, Item Aggregate)

Creator Kitではワールドの状態をTriggerOperationを使って更新します。この"更新"という操作が曲者で、更新という行為はその順番が結果に影響してしまいます。マルチプレイのオンラインゲームにおいて順番というものは非常に制御しづらく、同じ状態を起点としても結果が毎回異なる、といった事象が簡単に発生してしまいます。

画像1

逆に言えば、更新とは違って順番に依存しない操作であれば、他のプレイヤー等の情報を安全に利用することが出来ます。順番に依存しない操作としては例えば、"合計を取る" "全ての積をとる" "最大を取る" "最小を取る" などがあります。これらの操作を専門に扱うコンポーネントがあれば、ワールド全体の状態を集計し、その結果を利用した動作を気軽に作ることができるはずです。
(起点がItemであれば、それぞれのItemに対応したGlobal Logicを用意することで実行することが可能です。ただ、SignalとValueのペアをとる方法がないのでSignalの数が増えてしまうのは申し訳ないところ)

画像2

Reactives (Continuous Logic, Reactive Signal)

オンラインゲームでは自分の状況を他人に伝えるために、ネットワークを介して情報を送受信する必要があります。しかし、ネットワークで伝えきれる情報の量には限りがあり、また反映にはタイムラグが発生してしまうため、一人一人の状態は全く同じではありません。各々が自分の見えている挙動を信頼して操作を実行すると、例えばある人のところでは敵を倒したが別の人目線ではプレイヤーが倒されている、というような状況が発生してしまい、生まれた差を修復するの非常に難しいです。
それを避けるため、Creator Kitでは計算や条件判断を行うLogicは一人の手元でのみ動かし、その結果の状態を共有するというやり方を取っています。しかしその結果、今のLogicでは複数人が関わる場合はタイムラグが生まれたり、計算したタイミングを明示する必要があったりと、欲しい機能に対して素直に利用しやすいとは言えないです。
オンラインゲームで人毎に状態に差が生まれてしまうのは完全には避けられませんが、生まれるのが修復できる差異、つまり最終的には結果が同じになる動作であれば、人毎に実行することが可能です。「XはY+Zである」という事象は誰から見ても同じに表現できるが、「Xが条件をみたしたか」は人毎に結果が違いうる、と言い換えることが出来ます。前者の「数値同士の恒久的な関係を表現するLogic」と、後者の「数値から条件の変化を表現するSignal」があれば、シンプルな数値計算をより簡潔に素早く表現することができると考えています。

Player Bound Item

clusterでは、ワールド内で見えるものについて安心して回りの人と話せるように、自分と他人で見えているものが違うという状況を基本的には作れないようにしています。そのため、現状ではプレイヤーの情報は自分自身のUIとして表現するか、(特定のタイミングでの)アイテムのオーナーの情報として表現するしかありません。
しかし本質的には、ある場所に見えているものがどのプレイヤーにとっても同じであればよいので、明示的にプレイヤーと紐付けられたアイテムであればそこにプレイヤーの情報を表現することが出来るはずです (例えば頭の上に出るHPゲージなどが分かりやすいと思います) 。この種のアイテムの中ではPlayerLocalUIと同様にPlayerの情報を扱えるので、UIとして用意したものをほぼそのままの形で全員の情報提示として使い回すことが出来ます。
また副次的に、持つ以外の方法でプレイヤーに追従するアイテムや、入退室のより安定した扱いができるようになるかもしれません。

なんでないの?

他にももっとやりたいことがあるんじゃ。

例えば直近のCreator Kitのリリースである 乗り物機能 は、プレイヤーの空間上での扱い方をアプリの基盤となる仕組みから切り離し、クリエイターがプレイヤーに提示できる体験の幅を大きく広げているはずです。
人類の創造力を加速するために必要なことはまだまだたくさんあるので、興味がある人は こちらのサイト を見てください (最近サイトがリニューアルされました)。

(おまけ) プレビューについて

プレビューの見た目や動作は必ずしもアプリと同じではありません。
UIに関しては、Creator Kitという形で再配布することが出来ないものが含まれているのと、アプリのUIは変わる場合があり、それに依存したものを作ってもサポートできない、という理由があります。
しかし、プレビュー機能の充実には手が回っていないのが実情です。幸い、Creator Kitのコードは 完全に公開されている ので、手元でコードを書き換えたり、拡張ツールを作って公開したりも可能です。三人称視点・両手アイテム操作・乗り物姿勢確認・VR操作・ロジックのテキストエディタ等、追加したい機能はまだまだたくさんありますね。

この記事は クラスター Advent Calender 2021 6日目の記事 でした。その次は kurain さんの『新しい仕事と大阪東京通勤と子育ての話』です。

この記事が気に入ったらサポートをしてみませんか?