チームでボールを投げあうに至った話


この記事は SmartHR AdventCalendar の6日目です。

従業員が数百人いてかつリモートワークで日々仕事していると普段関わりのない同僚はほんとうに関わらないまま時間は過ぎて少しさみしいなと思っていたところにTwitterに流れてきたtweetがこれ。


Shopify Partyとはなんぞ?Mario Partyから文字ってるものだと思っていて、Shopify社内でインターナルに公開してるゲームで同僚と一緒になっていろんなミニゲームができるものですと、ちょっとしたアイスブレイクに、スタンドアップの合間に遊びつつ、とっても楽しそうに映りました。

(やってみたい!公開してくれないのかShopifyー。)

これこれこれこれこういうのがあるとリモートでもコミュニケーションパスが増えてよさそう!と思ったので詳しくみていきました。

使われている技術はUnityとマルチプレイヤーを容易に実装できるサービスnormcore.ioを使っていて、WebGL buildでブラウザ上で遊べてしまうと。お手軽!(WebGLはPrivateプランでのみ有効でした)

ということで、ここでは実際にnormcore.ioを使ってものすごく簡単にマルチプレイヤー実現できちゃうんじゃんと驚いたことを記していきます。


まずはSign upから、free planが用意されているので気軽に試すことができました。

normcore plan

チュートリアルがあったので最初にこれを写経して雰囲気を掴みました。プレイヤーの移動ロジックやカメラ移動の実装はあとでごっそり参考にしました。

このチュートリアルにはなかったんですが、normcore.ioはボイスチャットにも対応していて話したい欲求が強くなってきました。会社にはカシュと呼ばれるカルチャーがあって、業後にフリースペースにおのおのそれぞれまばらに集まってフリードリンクを嗜むというものでコロナ前の頃ではよかったんですがいまや家から働くのが普通になってしまったので参加することができず…. これをバーチャルの世界で実現できたら楽しそう!をモチベーションに進めていきました。ゲームの中で自由に歩き回って人の輪を作れておのおのグループになってわいわいできたらいいなを目標にして。

便利なものでUnity Asset Storeにはなんでも揃っているんですね!フィールドにはオフィスを、プレイヤーにはヒトを再現したくていろいろあさったところ

いい感じのオフィスのアセット:https://assetstore.unity.com/packages/3d/environments/urban/hq-archviz-loft-office-modular-186002

歩くなどのアニメーションも付いているタイツマン:https://assetstore.unity.com/packages/3d/characters/stickman-character-prototype-182000

などなどよさそうに思ったので課金しました。

アセットを落としてきてそこからせっせかせっせとそれらしき空間に整えて、チュートリアルにもあったようにEmpty objectにPlayerManagerと名付けてRealtimeコンポーネントを追加しました。ここでApp Keyをnormcore.ioから生成して持ってくる必要がありました。

PlayerManager

プレイヤーとしたいタイツマンprefabにはRealtime View/Realtime Transform、それからボイスチャットを可能にするためRealtime Avatar Voiceコンポーネントを追加しました。追加するだけマルチプレイヤーになってしまうすごい。。

Player

だいたい動くことがみれたので、実際に試したい欲が高まり休日に遊んで書いていたものだったんですがチームの雑談時間を利用してチームメンバーに入ってもらって雑談をこの中でできないかテストをお願いしました。

Preview1

一度目、、惨敗。。。会話ができない。。ヒトの声が聞こえる距離を見誤りめっちゃ至近距離でないと声が聞こえませんでした。あと、タイツマン誰が誰だかわかんない問題。みんなにZoomに入りもらい直して反省会をさせてもらったりしました。感謝

Realtime Avatar Voiceは内部でUnityのAudioSourceを参照してるので明示的に宣言することで自由に設定が変えられ、声が聞こえる範囲を自分のフィールドに合わせて調節しました。

AudioSource

それに加え、名前を表示したり申し訳程度に遊べる機能を追加してまたテストをお願い。




二度目、、聞こえる!喋れる!!

Preview2

牛になれるオプションを用意したり、

Preview3

ボールを投げる機能をいれたところ話すより投げるほうで盛り上がり結果雑談をまったくせずひたすらボールを投げては当てて終わりました。

cow

(実際に投げ合う画を撮り忘れたのでそれらしいものを添付)

プレイヤーの位置情報はRealtimeコンポーネントを追加することで勝手にしてくれますが、アニメーションの状態の同期やニックネームの同期は数ステップで必要で、RealtimeModelスクリプトを差し込んでこれを実現できました。

ここまでで、簡単にマルチプレイヤーでボイスチャットができるアプリを作れることが見れました。Zoomなどと違って同じ空間に複数グループを無作為に作って会話ができるのがいいのかなと。話すだけでなくShopifyのようにいろんなミニゲームを仕込んでいくのもよし(大変そう)、metaverseの波に乗ってVRにするのもよし(もはやそれはVRchatかな)、なにがしの形になるように引き続き進めていきます!

Related Posts

1ハゼは「予測」できるか?——複雑系物理学とAIで挑む焙煎の臨界点

ARIGATO COFFEE: 1ハゼ予兆検知機能。CSD(臨界減速)理論とAIを用いて、焙煎の臨界点をデータで予測できるのか

Can First Crack Be Predicted? —— Challenging the Tipping Point of Roasting with Complex Systems Physics and AI

ARIGATO COFFEE: First Crack pre-detection feature. An account of predicting the tipping point of roasting using data, CSD (Critical Slowing Down) theory, and AI.

さっそくAWS LambdaをRubyで触ってみる

AmazonからLambdaでRubyをサポートするアナウンスがあったので早速試してみる

It describes Blockchain with minimum line.

I'm going to write Blockchain in Ruby, inspired by Naivechain

Dappプログラマへの最初の一歩

プラットフォームとしてのEthereum

最小コードでBlockchainを表現する

Naivechainを参考にRubyでかいてみる

ここ1年ちょっとを振り返ってみる

バンクーバーでの過ごし方、学校それに仕事とか

How I met Kyoto, part 2

The man who I met in Tarocafe was so mysterious and acatalepsy for me.

I wanna introduce cafes where You should go in Kyoto.

There are my favourite cafes in Kyoto.

How I met Kyoto

You should have one or more experiences that changes your life. in a better way