Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

連絡はサークルTwitterのDMへお願いします。
「面白法人カヤックVR分室」としても活動しています。詳細はこちら

面白法人カヤックインターン体験記 ~2019年夏~

こんにちは! A-PxL部員の橋本です。今年の夏、私は当部(A-PxL)でお世話になっているカヤックさんのVR部のインターンシップに参加させていただきました。インターンに行ってから少し期間が空いてしまいましたが、今回はそのレポートをしていきたいと思います。

インターンに参加した理由

自分の実力を試してみたかった

一番の理由はこれでした。私は今までUnityやArduinoなどのツールを扱ってコンテンツを作ってきました。しかし、コンテンツを作ってきた中で本当に自分に力がついてきていたのか、成長してきていたのかということについていつも疑問に思っていました。その疑問を払拭するべく今回インターンに参加することを決心しました。

カヤックという企業を知りたかった

会津大で開かれたカヤック式のブレストワークショップに参加したり、当部の部長になったことで実際にカヤックの社員の方とミーティングをしたりしていく中で、カヤックさんは私にとって一番身近な企業になっていきました。そんな経験をしていく中で、「もっとこの企業について知ってみたい」という思いが芽生えていったこともあり、今回はカヤックVR部署のインターンに参加することにしました。

インターンでの業務内容

インターンでの課題は「インターン期間中(7日間)にOculus Quest向けのVRゲームを1本作る」というものでした。

という訳で、Unityを使ってVRゲーム1本を7日間で作りました。ちなみに、このコンテンツは会社のプロダクトとは一切関係なく、私が所有するコンテンツです。

成果物

f:id:aizu-vr:20191104021810p:plain


JengaVR

どんなゲーム?

私には以前から誰もが簡単に操作できて楽しめるようなコンテンツを作りたいという思いがありました。そんなことを考えながら思いついたのが、「VR空間でのジェンガ」でした。ジェンガなら大多数の人がルールを知っているはずですし、コードレスなOculus QuestだからHMDを使い回すことも容易で複数人対戦も可能です。

工夫したところは?

このゲームでは、プレイヤーがジェンガブロックを抜き取る際はキューブを発射してブロックを抜き取ります。

2日目に実際に今回のプロジェクトがうまく動くのか検証することになり、「プレイヤーがジェンガブロックを細長い棒を使って押し出す」というプロトタイプを作ってみたのですが、物理挙動がネックとなってしまっていてまともに遊べたものではありませんでした。

何かいい解決策はないかとネットで調べていたところ、こんなものを見つけました。

gigazine.net

物理挙動が怪しくなるのは、常に小刻みに揺れているVR空間内のコントローラーと幾つものブロックが接触して積み重なっているジェンガタワーが接触することが原因です。つまり、プレイヤーが操作するコントローラを介することなく一瞬でブロックを抜き取ることができれば物理挙動の問題は解決できることになります。そして、その解決策が上記のジェンガピストルでした。この抜き取り方法にした結果、ジェンガを抜き取ることが容易になり問題なく遊べるようになりました。

面白いポイントは?

このゲームの最大の特徴は、巨大なジェンガブロックでジェンガができることです。ジェンガブロック1つの長さ(奥行き)は大体人の腕の長さくらいあります。ジェンガブロックのタワーを見上げることができるのは新鮮な体験ではないかと思われます。VRゲームでは大きい物体が目の前にあると「おぉ!」ってなりますからね。また、ブロックが大きいためプレイヤーがブロックを積む際は回り込む、しゃがむといった体の動作が必要になります。VRゲームでは、体の動きがあればあるほど没入感が増すと言われています。ブロックが大きいことがVRゲームとしての完成度を高めていると言えるのではないでしょうか。

また、ゲームオーバー時の演出として、空から爆弾が落ちてきて爆発してブロックが宙に舞うというのがあります。社員さんからのアイディアで、ゲームオーバー時の演出でVRならではの要素が欲しいとのことで追加した要素でしたが、これもなかなかに面白い演出となったと思っています。

作る時に苦労したことは?

なんといってもデバッグです。今回開発に使用したPCはmacでした。macでもOculus Quest向けにビルドして実行することは可能なのですが、デバッグの度にビルドで時間が取られてしまうのでかなりしんどかったです。そのため、なるべくデバッグでしんどくならないようにUnityエディターでも操作できるようなデバッグ用のプレイヤーを用意してあげるなどしてなるべく実機でのデバッグをしないようにしてあげました。

作る時にこだわったところは?

UI, UXです。プレイヤーがキューブを発射する際はレイを表示させてどの方向に飛んで行くかをプレイヤーに教えてあげる、ブロック抜き取り -> 積み上げのフェーズの移行の際にフェードアウト/インするようにする、ブロックを積み上げる際は抜き取ったブロックのすぐ近くにプレイヤーを移動させる、ブロック積み上げ成功判定までの時間をインジケーターで表示させる、なるべく複雑な操作を含まないように心がける、、、などなど、なるべくゲームを遊ぶことが少ない人でも簡単に操作ができるようにこだわって作りました。結果、とてもユーザーライクなゲームに仕上がったのではないかと思います。

学んだこと

プロトタイプを作って実現可能性を検証せよ!

今回ジェンガのゲームを作ると決まったときに懸念していたことはやはり物理挙動でした。最初は完成させることができるのかかなり疑問に思っていました。もし作れない場合は他にどんなゲームを作ろうかと保険を考えていたくらいです。とりあえず動くかどうかを確かめるべく試作第一号を作りあげて遊んだ結果、やはりダメだと分かりました。ではどうするかと考えた際に上記のジェンガピストルの記事と出会って、試作第二号を作った結果、これならいける! と確信することができました。その時の安心感は凄かったですね(笑)。

ちゃんと遊べるものを作れるのか不安になりながら開発をするのと、完成した結果ちゃんと遊べると確信を持って開発するのとでは心理的にかなり違いが生まれるものです。なんだか記事にして書くと当たり前な感じがしますが、事前検証というのはやはり大事です。特に、失敗することが許されないという環境では尚更大事になることを学びました。

まずは根本の部分を作れ!

3日目の出来事なのですが、まだ仕様をきちんと決める前にあまり重要ではない詳細な部分の実装を先走ってやってしまったということがありました。その日の最後にあった進捗報告会で社員さんに「その部分にはまだあまり拘らなくてもいいんじゃない?」と指摘されました。どうやら自分には、重要ではない部分に目がいってしまうという欠点があるようです。実は以前参加したことがあるハッカソンでも似たようなことをして失敗していました。同じ失態を2度もしてしまったことは悔しかったですね。結局、その日に書いたスクリプトは全てお蔵入りすることになってしまいました。そのプロジェクトの根本の部分は何なのかについてしっかりと見極めるようにしていく必要があります。

デザインパターンを意識してコーディングせよ!

今回のプロジェクトではUniRxを使用して開発していたのですが、社員さんにコードレビューをしてもらった時に「もっとデザインパターンを意識して書いた方がいい」というアドバイスをいただきました。確かに、UniRxを使っていることで処理の内容がわかり易くなったりしていることは間違いないと思うのですが、スクリプトの数が増えていくにつれて参照が複雑になって開発が大変になったりしていました(特にUI周り)。クラスの設計を行っていなかったというのもあるかもしれませんが、それにしてもかなり煩雑な設計になってしまったと思います。UniRxと相性がいいとされるMVP(MV(R)P)パターンについて勉強してみるといいとアドバイスいただきました。

また、軽くZenjectを使ってみたりもしました。今回はシングルトン撲滅のためだけに使いましたが、次に使うときはもっと活用してみたいですね(そのためには疎結合な設計についてさらに学ぶ必要がありますが...)。

MonoBehaviorを継承しないクラスを書くべし!

これもコードレビューしてもらった社員さんに言われたことです。MonoBehaviorを継承しないことによるメリットとしては、ゲームオブジェクトにコンポーネントとしてアタッチしなくても済むということが挙げられます。開発の規模が大きくなってくるとこれがかなり嬉しくなってきます。今後はなるべくMonoBehaviorを継承しなくても済む場面では継承しないように心がけていきたいです。Zenjectのサンプルゲームが見たところ参考になりそうですね。

何らかのアクションには必ずSEが必要!

これはテストプレイを社員さんにやってもらっていた時のことなのですが、その時はプレイヤーの見ているHMDの画面を見ずに操作方法のレクチャーをしていました。そのような状況では、例えばプレイヤーがものを掴む時に本当に掴めたかどうかを確認することは困難です。プレイヤーが「掴めた!」と言ったとしても、実は掴めていなかったりすることがあるかもしれません。しかし、SEがあることによってプレイヤーが今どんな操作をしているのかを画面を見なくても推測することができるのです。基本的にコンピューターゲームではプレイヤーからの操作に対するアクションにはSEがついているものだとは思いますが、今回改めてSEの重要性に気付くことができました。

必ず開発者以外の人にテストプレイさせろ!

ゲームオーバー時の演出として爆弾が降ってくるという演出を作りました。実はその前にもう1つ「ドラゴンの置物が巨大化してプレイヤーを飲み込む」というゲームオーバーの演出を作っていました。番犬●オ●オではゲームオーバーになった時は犬が起きて吠えますよね。あんな感じの演出を作りたかったという思いがありました。しかし、実際に社員さんに遊んでもらった際にゲームオーバーになった時、ドラゴンの方を向いていなくてドラゴンに食べられたことに気付いてくれなかったことがありました。VRゲーム開発の難しさとして、開発者がユーザーに見て欲しいと思っている方向をユーザーが見てくれないというものがあります。今回のドラゴンの演出はUXがダメだったということですね。対策としては、ガイドラインなどを示したりして対象物に視線が行くように何らかの方法で誘導することが挙げられますが、今回は演出を変更することを選びました。こういった発見は開発者では見つけられない部分だと思われます。そのため、開発者以外のテストプレイヤーを用いて観察して調整することが重要なのです。

ちなみに、任天堂宮本茂氏はゲームの開発中に社内からそのゲームに触ったことがない人を1人さらっていって、何の説明もなしにいきなりコントローラーを握らせてプレイさせて、その様子を後ろから眺めながら「お客さん目線」を見つけるらしいです。

カヤックの様子

とにかく社員さん同士の仲がいい! そう感じました。笑う時はその部屋にいる人全員でそのことについて笑ったり、社員さん同士であだ名で呼び合ったりと、とても朗らかな空気で溢れていました。おかげで毎日何かしらのことで笑うことができました。また、あまり慣れていない自分のことを気遣ってくれる優しい社員さんたちがたくさんいてくれたおかげで環境にもすぐに慣れることができたと思います。カヤックの説明会で聞いた通り楽しく働ける環境だったと思います。

また、鎌倉ということもあって観光地にすぐに足を運べるというのもいいですね! (江ノ島のたこせんべいうまかったなぁ...)

インターンを体験して

実は今までVRゲームを作って誰かに遊んでもらうという体験はありませんでした。しかし今回作ったゲームでは社員さんになかなかに楽しんでもらえたように感じられました。自分が作ったゲームで誰かが楽しんでくれるのを見たのは今回が初めてでした。ユーザーが楽しんでいる風景を見ることがゲーム開発者にとっては最高の瞬間ですね。本当に嬉しかったし、自信になりました。今回のインターンはとても意味のある濃厚な体験にできたと確信しています。それもこれもカヤックさんでインターンをしたおかげです。お世話になった社員の方々には本当に感謝しています。

私は大学院に進学することを考えているので就活はもう少し先になるのですが、今回の体験を大切にしてこれからも創作活動を続けていきたいです。

そして、この記事を読んだA-PxLの後輩達はカヤックインターンへ行きましょう! きっと忘れられない体験ができますよ!

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!