8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity+VRTKで物を掴んで拡大縮小

Last updated at Posted at 2018-09-18

Unity+VRTKで、配置したオブジェクトを掴んでふりまわしたり、拡大縮小する為の方法をまとめました。
簡単な3D Model Viewerならこれだけで作れます(モデルを動的に読みこむことはできませんが…)。

使ったバージョン:

  • Unity 2018.2.8f1
  • VRTK 3.2.1

VRTKを使えるようにするまで

  1. 新しくプロジェクトを作る
  2. VRTKをAsset Storeからインポートする
    環境に応じてOculus IntegrationやSteamVR Plugin等もインポートしましょう。
  3. VRTK_MaterialColorSwapHighlighter.csでエラーが出る
Assets/VRTK/Scripts/Interactions/Highlighters/VRTK_MaterialColorSwapHighlighter.cs(146,66): error CS1540: Cannot access protected member `UnityEngine.Texture.Texture()' via a qualifier of type `UnityEngine.Texture'. The qualifier must be of type `VRTK.Highlighters.VRTK_MaterialColorSwapHighlighter' or derived from it

よくわかっていませんが、とりあえず以下のようにエラーが出ている行(146行目)をコメントアウトすればOKです:
https://github.com/thestonefox/VRTK/issues/1758 によれば、エラーが出ている行(146行目)を、

VRTK_MaterialColorSwapHighlighter.cs
if (resetMainTexture && material.HasProperty("_MainTex"))
{
  renderer.material.SetTexture("_MainTex", new Texture2D(0,0));
}

とすればいいそうです。
これでVRTKが使えるようになります。
試しにVRTK/Examples以下にあるSceneを読み込んで実行してみましょう。

物を掴めるようにするまで

以下はちょっと手抜きして、VRTK/Examples以下にあるSceneをコピーして利用することにします。
既に作ってあるSceneで対応したい場合は、Scene全体をコピーするのではなく、[VRTK_SDKManager][VRTK_Scripts]などをコピーすれば動くと思います(←適当)。

  1. VRTK/Examples/043_Controller_SecondaryControllerActionsというシーンを開く
  2. Sceneを別名で保存する(FileSave Scene as...を選ぶ)
  3. 掴みたいオブジェクトを配置する
    まだ移動はできないので、手が届くところ(原点の近く)に配置する必要があります。1
  1. オブジェクトにColliderを追加
    (既にある場合は飛ばしてよい) オブジェクトを選択して、InspectorAdd Componentから、オブジェクトの形状に応じて適当なColliderを選んで追加し、設定する
  2. VRTK_InteractableObjectを追加
    同様にAdd Componentから、VRTK_InteractableObject(VRTK/Scripts/Interactionsにある。検索した方が早いかも)を選んで追加し、Is Grabbableにチェックを入れる
  3. 重力や慣性の影響を受けて欲しくない場合は、Add ComponentからRigidbodyを追加して以下のように設定:
    1. Use Gravityのチェックを外す(重力の影響を受けない)
    2. Is Kinematicにチェックを入れる(慣性の法則に従わない)

これでコントローラのグリップボタンで掴めるようになります。

両手で掴んで拡大縮小

拡大縮小もしたい場合は、上に加えて以下の設定をします。

  1. オブジェクトに上と同様、Add Componentから以下を追加:
    • VRTK_ChildOfControllerGrabAttach (VRTK/Scripts/Interactions/Grab Attach Mechanics/にある)
      • VRTK_FixedJointGrabAttach など他にも類似のものがあるので、状況に応じて使い分ける必要があるかも
    • VRTK_AxisScaleGrabAction (VRTK/Scripts/Interactions/Secondary Controller Grab Actions/にある)
  2. VRTK_Interactable ObjectGrab Attach Mechanic ScriptSecondary Grab Action Scriptをオブジェクト自身に設定
  3. VRTK_Axis Scale Grab ActionUniform Scalingにチェックを入れる
  4. VRTK_Child Of Controller Grab AttachPrecision Grabにチェックを入れると,物体のつかんだ場所を把握してより正確な動作ができるようになる

おまけ:テレポート

  1. 編集しているSceneを保存してから、VRTK/Examples/004_CameraRig_BasicTeleportを開く
  2. [VRTK_Scripts]PlayAreaを選択してコピーする
  3. 編集していたSceneを再度開き、[VRTK_Scripts]以下にペーストする
    (上下移動などもしたい場合はVRTK/Examplesの他のSceneを参考にしてください)
  4. [VRTK_Scripts]LeftControllerRightControllerVRTK_PointerVRTK_Bazier Pointer Renderer (または VRTK_Straight Pointer Renderer) の 2 つを追加
  5. VRTK_PointerPointer Rendererを自分自身 (LeftControllerまたはRightController) に設定

これでスティックやトラックパッドを押しこむとポインタが表示され、離すとその時指していた場所にテレポートできるようになります。

  1. ここで余計なオブジェクトは削除していいですが、参考にする為にしばらく残しておいた方がいいかもしれません。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?