Tortoise Shell

Webサービスの会社で働くデザイナーが、デザインやライフハックについてゆるく書き連ねるブログです。

バレンタインが近いので、VRでユニティちゃんにチョコを渡す練習をした

f:id:tamusan100:20190204005705p:plain

最近Oculus Riftで遊んでいて、あらためて「Oculus Touchの自由度ってすごい!」と思うようになりました。

そこで自分でも何か試したくなったのですが、もうすぐバレンタインということで、チョコを渡せるコンテンツを作ることにしました。

せっかくなら可愛い女の子に渡したいということで、おなじみのユニティちゃんに登場してもらいました。

実際に作ったものが、こちらになります。

というわけで、今回はUnityを使って、VRでユニティちゃんにチョコを渡すコンテンツを作ってみた記録になります。

必要なモノを揃える

まずはプロジェクトを立ち上げて、必要なアセットをインポートします。

チョコレートも、今回は無料のアセットを使わせていただきました。

ひととおり揃ったら、Oculus > SampleFramework > Core > AvatarGrab > Prefabs の中にある「LocalAvatarWithGrab」をヒエラルキーにドラッグしてください。

これだけで、シーンを実行すると、手のモデルが表示され自由に動かせることが確認できたかと思います。

チョコレートを掴めるようにする

f:id:tamusan100:20190204002959p:plain


モノを掴むためには、掴みたいオブジェクトに「OVR Grabbable」というスクリプトと、Rigidbodyをアタッチする必要があります。

先ほどインポートした「Valentines_Free」の中の、「Chocolates」と「Chocolatebox_base」というモデルをヒエラルキーに配置し、空のゲームオブジェクト(適当に「Chocolate」と付けました)の配下に移動させます。

今回は、チョコレートを掴めるようにしたいので、この「Chocolate」に Rigidbody と OVR Grabbable をアタッチします。

また、床に置いていては掴みづらいので、Cube で適当な台を作ってその上に置いてみました。

ユニティちゃんに渡して喜んでもらう

f:id:tamusan100:20190204003839p:plain

次に、ユニティちゃんを配置します。

unity-chan! > Unity-chan! Model > Prefabs  > unitychan をヒエラルキーに配置します。

チョコを渡すまでは、ニュートラルな状態でいてほしいので、まずは「WAIT00」というアニメーションが自動で再生され続けるよう設定しました。

それから、ユニティちゃんとチョコレートに、それぞれ Box Colider を設定します。

ユニティちゃんの方には、Is Trigger にチェックを入れておいてください。

Oculus Touchでつかんだチョコレートを、ユニティちゃんの近くまで持ってくると、イベントが発火するという仕組みです。

スクリプトもごく単純で、チョコレート側には以下のように記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chocolate : MonoBehaviour {

    // トリガー領域進入時に呼び出される
    void OnTriggerEnter(Collider other)
    {
        // 衝突対象に"Chocolate"メッセージ
        other.SendMessage("Chocolate");
    }
}

こうすることで、チョコレートがぶつかった対象に対して「Chocolate」というメソッドを呼び出すことができます。

一方で、チョコレートがぶつかる側のユニティちゃんに対しては、以下のようなスクリプトをアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Reaction : MonoBehaviour {

    private Animator UnityChanValentine;

    void Start()
    {
        UnityChanValentine = GetComponent<Animator>();
    }

    void Chocolate()
    {
        UnityChanValentine.SetBool("Good", true);
    }
}

Start時に、あらかじめAnimatorコンポーネントを取得しておきます。

そして、チョコレートがぶつかってきたら、アニメーションが切り替わるという仕組みです。

これによって、チョコレートを掴んでユニティちゃんに差し出すと、喜んでもらえるという体験が実現できました。

おわりに

はじめは、Oculus Touchの実験のつもりで作ったものでしたが、ユニティちゃんが喜ぶ顔を見るとこちらまで嬉しくなってしまいました。

バレンタイン当日まであと10日くらいあるので、もうちょっと改良して、いろいろと遊んでみようかなと思います。

チョコレートの種類によってリアクションが変わったり、カレーパンだともっと喜んだり(ユニティちゃんはカレーパンが好物)、もちろんステージも作りこみたいですね。

Oculus Touch、かなり楽しいので、いろいろと試してみたいと思います。