はじめに
Oculus Integrationには様々なサンプルシーンが含まれていて勉強になるのですが、最近はDistanceGrabのシーンをベースに手を加えています。
このシーンにはバグがあり物を掴んだ時に吹き飛ばされてしまうのですが、以下ページに対処法やシーンの説明があり、大変参考になりました。
[【Oculus Quest開発メモ】離れた場所にある物を掴む Distance Grabber & Grabbable編【Unity】]
(https://raspberly.hateblo.jp/entry/OculusQuestDistanceGrabberGrabbable)
DistanceGrabでは、片手で物をつかんで操作できるのですが、両手でつかんで操作する機能はありませんでした。
スクリプトを見たところ、結構改造しないとできなさそうな雰囲気でした。
どうしようか検討していたところ、すでにそのようなものを作成されている人がいましたので、試しに使わせていただいたところ、自分がやりたかったイメージ通りで非常に使いやすかったです。
[VR 向けの自作 Grabber を作ってみた]
(http://tips.hecomi.com/entry/2017/07/30/234658)
開発環境
Unity 2019.1.7f1
Oculus Integration for Unity - 1.37
VrGrabber-v0.0.3
試したこと
ダウンロードしてきた"VrGrabber-v0.0.3.unitypackage"をOculusQuest向けに作成したプロジェクトにインポートするだけで、そのままサンプルシーンを動作させることができました。
また、DistanceGrabのシーンのオブジェクトのスクリプトを元の"DistanceGrabbable.cs"から"VrgGrabbable.cs"に差し替えて、DisatanceGrabHandLeft/RightをVrg Left/Right Grabberに差し替えることで両手で操作できるようになりました。
ただ、"DistanceGrabbable.cs"にはアウトライン・クロスヘアー対応の機能があり、外しただけではオブジェクトのアウトラインの表示が見えたままになってしまうため、表示を消すようなスクリプトを追加しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace VrGrabber
{
public class VrgGrabbableExtend : VrgGrabbable
{
public string m_materialColorField;
Renderer m_renderer;
MaterialPropertyBlock m_mpb;
void Start()
{
m_renderer = gameObject.GetComponent<Renderer>();
m_mpb = new MaterialPropertyBlock();
m_mpb.SetColor(m_materialColorField, Color.white);
m_renderer.SetPropertyBlock(m_mpb);
}
}
}
動作例
こんな感じになります。画像は離れたところから操作する例ですが、直接つかんで操作することもできます。
これまでadbからコマンドでキャプチャしていたため2眼の画像になってしまい見にくかったのですが、メニュー画面上からの操作で録画すると普通に1眼の画像になることにいまさらですが気が付きました・・・