初めまして。Cシステム開発Gの松山です。
「メタバース打合せサービス」開発をしました!(前編)の続きを担当させていただきます。
私はアットホームに2021年に新卒で入社しました。現在は不動産情報サイト アットホームの企画や新サービスの研究開発に取り組んでいます。今回も前編に続き研究開発として取り組んだ「メタバース打合せサービス」の「機能開発」についてご紹介していこうと思います。
初めてのメタバース空間
前編でも少し触れましたが、初めてmeta quest2でメタバースに入るとその臨場感には感動を覚えます。しかし、「個人間でチャットできないと不便」「VRゴーグルをつけると酔う」「操作の仕方が分からないから行きたいところに行けない」という声が聞こえてきました。確かに今までの2D感覚では操作の仕方も見え方も大きく異なります。そこで我々開発者チームで「ダイレクトメッセージ機能」と「ワープ機能」を実装しました。その2点について今回は取り上げます。
ダイレクトメッセージ機能とは
どのようにダイレクトメッセージ機能を作った?
続いて機能面についてです。
元々全員に公開されるチャットはMozilla Hubs(オープンソース)に存在しました。そこに機能を付け加えて、全体に送れるチャットを残したまま個人間のチャットに切り替えられるようにしました。
考え方としては、入室時に同じ空間にいる全員と個人間でwebsocketをつなげます。個人でやり取りするときはこちらのwebsocketを使います。一時的に個人間に新しいwebsocketを作成することで機密性をあげています。そのwebsocketには1対1の空間なのでどちらかの端末が盗難・紛失しない限り安全にチャットすることができます。ずっとつなげていて大丈夫なの?という点は、退出時にそのwebsocketを削除しているので履歴も残らず数も増え続けないため問題ありません。
ワープ機能とは
例えば、
「VRゴーグルをつけると酔う」という方には1回の操作で目的地に辿り着くことで操作を減らし、酔いづらくなります。
「操作の仕方が分からないから行きたいところに行けない」という方にも、先に目的地に行ってる人が呼び寄せることで、操作が苦手な人でも同じ景色、同じ臨場感を味わうことができます。
どのようにワープ機能を作った?
では本題のワープ機能の実装方法について簡単にご説明させていただきます。
メタバース空間内の考え方としてwebsocketを利用してリアルタイム通信を行い、自分のいる座標を同じ空間内にいる人にリアルタイムで送るという感じです。
例えば
メタバース空間内にAさんとBさんがいたとします。
Aさんが1歩前にでた場合、BさんにAさんの1歩前に出た座標が送られます。
Bさん側ではその座標をもとにAさんを移動させます。
簡単にいうとこのような仕組みです。なので、Bさん側からすればwebsocketから送られてきたデータを元に表示しているだけになります。
なので、BさんがAさんを自分のところに呼び寄せたい場合は、Aさんに対して「自分はここ(座標)にいるからAさんきて〜」と送ります。これを受け取ったAさんはその座標をもとに、自分の座標を書き換えます。座標を書き換えるのでその座標まで一気に進めることになりワープが成立します。
※YはY座標
※ZはZ座標
まとめ
VRゴーグルなど最新機器は全員が同じように操作できなかったり、個人によって使い心地が違ったりします。そこの差を「ワープ機能」をつけたことにより、「移動」という面では全員が同じ体験ができるようになりました。ワープ機能をつけたことで、アバターが動かなくてはいけない距離が激減したため、VR酔いしづらくなりました。また、「ダイレクトメッセージ機能」をつけたことでより細かいやり取りができるようになりました。機密性にも力を入れたことで安心して個人間でのやり取りしていただくことができます。
さいごに
今回は機能面を主にご紹介しました。いかがでしたか。
私は大学4年生になった頃にコロナが始まり、卒業旅行へも行けませんでした。一番時間に余裕がある時期を失いました。この頃は今ほどメタバースが進んでいたわけでもなかったため家で何もできない時間がありました。今の日本ではまだそこまで広まっていないメタバースですが、今後の技術発展によりさらに身近になってくることが予想されます。家にいながら旅行ができたり、個人では行けないような宇宙などへ行ける時代が来そうです。私の代のように何もできない時間を作るのではなく、実際にどこかへ行けなくてもメタバース上で卒業旅行をみんなで楽しめたら良いなと思います。