Tortoise Shell

趣味や仕事について書くブログ

集中力と反射神経を鍛える、VR色あてゲームを作った(Oculus Go向け)

こんにちは。もうすぐ、Oculus Questが発売されそうですね。

Oculus Goを買ってから、Oculus Riftも買った自分としては、ようやくVRらしい体験がスタンドアロンで実現することがとても楽しみです。

これをきっかけに、2019年は、ますますVRが盛り上がっていくと良いなと思います。

さて、前作のHalloweenShootingに続いて、新しいVRゲームを作ったので紹介させてください。

一言で表現すると「集中力と反射神経を鍛える、VR色あてゲーム」で、タイトルは「ColorBallPicker」です。

今回は、このゲームの制作を通して得られた、様々な気づきについて書き留めておこうと思います。

背景

ゲームを作るにあたり、着想となったのは、「カラー神経衰弱」という遊びを知ったことでした。

カラー神経衰弱は、通常の神経衰弱とは異なり、図柄ではなく色を合わせるゲームです。

通常の神経衰弱よりもさらに簡単なため、小さな子どもや、認知症のお年寄りに向けたレクリエーションとしても活用されているようです。

カラー神経衰弱 - デイ:おすすめレク

ルールが単純だからこそ、VRを活用し、さらに集中力を鍛えるゲームとして昇華させられると考えました。

ゲームルール

遊び方は単純で、以下の3つのステップから成り立っています。

1. オープニング

f:id:tamusan100:20190218175838p:plain

スタート画面で、好みの難易度を選びます。初めての方は、Easyモードから。慣れてきた方は、Hardモードをおすすめします。

2. ゲーム開始

f:id:tamusan100:20190218175859p:plain

ゲームが始まると、目の前に小さなボールが表示されます。周りを見て、同じ色のボールに向かってレーザーを当て、トリガーを引きます。

3. ゲーム終了

f:id:tamusan100:20190218175923p:plain

制限時間が過ぎると、獲得したスコアと評価コメントが表示されます。自己ベストを目指して、何度も遊んでみてください。

VRへの展開と仮説

元々、神経衰弱は英語で「Concentration(集中)Game」と呼ばれており、集中力を鍛えられるゲームとして知られています。

VRのメリットとしては、360度の視覚表現と、没入感を持たせられるところです。

よって、通常の神経衰弱と異なり、目の前だけでなく広範囲に注意を向けさせられます。

また、VR空間に入ることで、周囲のノイズも遮断できる。

色を選ぶ行為と、VRならではの表現を掛け合わせることで、集中力はもちろん、空間認識能力や、判断力、反射神経も鍛えられるゲームを目指しました。

技術的挑戦

技術的挑戦と言うと大げさですが、前回初めて作ったVRゲーム「Halloween Shooting」と比べると、いくつか新しい手法を取り入れてみました。

コルーチンによる遅延処理

プロトタイプを作成しているときに、あることに気がつきました。

それは、目の前にボールが表示されてから、対象のボールを見つけるまでに緊張感がなさすぎることです。

というのも、それまでの仕様では、1つ正解しなければボールの色は切り替わらないことになっていました。

そこで、目の前にボールが表示されたら、3秒経つと問答無用で切り替える仕様に変更しました。

private IEnumerator CreateStickBall(float t)
    {
        while (true)
        {
            // t秒待ってから実行
            yield return new WaitForSeconds(t);

            // StickBallを配列からランダム生成
            stickBall = Instantiate(stickBalls[Random.Range(0, stickBalls.Length)], transform.position, transform.rotation);

            // 生成時の効果音を再生
            createMusic.Play();

            // StickBallを指定したオブジェクトの子要素にする
            stickBall.transform.parent = _CenterEyeAnchor;
            stickBall.transform.localPosition = new Vector3(0, 0, 1);
            stickBallName = stickBall.tag;

            // 3秒経ったら削除する
            yield return new WaitForSeconds(stickBallInterval);
            Destroy(stickBall);

            // 1秒のアイドリング期間の後、次のループへ
            yield return new WaitForSeconds(1);
        }
    }

また対象となるボールに向かってトリガーを引いた際には、コルーチンをストップさせ、パーティクル生成やポイント加算を行ってから再開するようにしています。

// トリガーを引いたら
 if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
 {
      // 手元のボールとステージのボールが一致していたら
      if(stageBallName == stickBallName)
      {
          stickBallName = null; // 連打できないようリセット
          StopCoroutine("CreateStickBall"); // コルーチンをストップ
          RayObj.SendMessage("TriggerCorrect"); // パーティクルを生成
          score.AddScore(addPoint); // ポイントを加算
          addMusic.Play(); // 音を鳴らす
          Destroy(stickBall); // 手元のボールを削除
          StartCoroutine("CreateStickBall", 0.5); // コルーチンをスタート
      }
      else if (stickBallName == null)
      {
          return; // nullだと何も反応しないようにする
      }
      else
      {
          // 省略
      }
}

これで、うかうかしていては、あっという間にボールが切り替わって得点が取れなくなるようにしました。

TextMesh Proの導入

以前から、UI周りをどうすればリッチにできるのか分からなかったのですが、TextMesh Proの存在をようやく知って試してみました。

assetstore.unity.com

Unityでは、デフォルトのフォントとして「Arial」が入っているのですが、そのままだと「サンプルゲーム感」がぬぐえなくなります。

そこで、ゲームのテイストに合わせたフォントを導入することで、ポップな世界観に合うテキスト表現を実現できました。

TextMesh Proの使い方については、下記の記事が分かりやすかったので、興味のある方はぜひ読んでみてください。

TextMesh Pro(テキストメッシュプロ)でテキストUIをカッコ良くしよう

フィードバック

今回は、機会があって10数人くらいの方からフィードバックをいただき、改善点も見出すことができました。

VR未経験者にはルールが理解しづらい

コントローラーからRayが飛んでいて、ターゲットに合わせてトリガーを引くというのは、VRゲームではよくある表現方法です。

しかしながら、VR未経験者にとっては、直感的にルールを理解することが難しかったと思います。

やはり、何らかのチュートリアルを実施するか、オープニングで軽くゲームルールの説明は必要だったと反省しました。

ボールを選んだときの反応が分かりづらい

ボールを選んだ際、正解だとキラっと光り、不正解だとモヤが出るようにしていました。

しかし、明るいステージ作りをしている関係で、特に正解だったときは光っているのが分かりづらくなっていたようです。

もっと、ボールが爆発したり等、分かりやすい表現が必要だったと思います。

ボールの動きが速すぎて難しい

体験される方によっては、Easyモードで相当ゆっくりなボールの動きでも、早くて難しいと感じられる場合があるようです。

こういった感覚も、ユーザーテストを通してフィードバックを得られなければ、掴めなかったと思います。

先ほどのゲームルールの話と合わせて、例えば、まったくボールが動かないチュートリアルステージを作っても良かったかもしれません。

おわりに

全体的に、作っていて思ったのは、あらためて1人だけで全て作るのは大変だなということでした。

企画から、必要な3Dモデル探し、実装、音楽、ゲームルールの調整など、やることを挙げれば枚挙にいとまがありません。

そのため、いかに落としどころを見つけて、どのように着地させるかを考えることが重要だと感じました。

だからこそ、色々な得意分野をもったメンバーでチームを組んで作るのが、一番良いものが作りやすいのだと分かったような気がします。

今年は、もっといろんな人を巻き込みながら、何かVRコンテンツを作れたらいいなと思いました。

それでは、最後まで読んでくださり、ありがとうございました!