HTC Vive の開発まとめ Pert 2.
かずまです。
HTC Viveでの開発方法がめっちゃ簡単になっているので最低限メモっておきます。
ちなみに作ったものはTwitterに乗ってます。
ようやくキャッチボール実現。#Unity pic.twitter.com/YpYd546aEZ
— かずま (@kazumalab) 2016年11月13日
これとかサクッとできちゃいます。
あとはお絵かきとかもろもろ。
前回はものをつかむコードだけをのっけたのですが使い方がいまいち載ってなくて、自分でも見返したときに死んだのでもう一度書き直そうかと思います。
ちなみにこちらは前回。
結構僕の中ではだめな記事。笑
参考になりません。
準備
これをまずプロジェクト内に入れます。
シーンを新しく作り、PlaneをVector3.zeroの位置で作成します。
そのあとさっき入れたPluginのPrefab内にある、
- [CameraRig]
- [Status]
- [SteamVR]
をシーンに入れておきます。位置はそれぞれVector3.zeroです。
これであとはVIVEをPCにつないでおけば再生するたびにSteamVRを起動してくれて、VR空間内に入ることができます。
めっちゃ便利ですね。
ちょっとした小技
標準ではSteamControllerが表示されています。
それを変更する場合は
まず、先ほど入れたCameraRig内のControllerの子になっているModelを選択します。
その後InspectorからSteamVR_RenderModelのEnableをOffにします。
これで再生時に表示されなくなりました。
あとはModelと同じ階層に自分が手やControllerとして表示したいものを置くだけです。(positionはVector3.zero)
あとは開発!
今回はSteamVRのメニューと同じような仕様のControllerからRayCastを飛ばして当たったところに合わせて線を短くするという方法をメモっておきます。
めっちゃ簡単なのですが忘れるのも早いので。
RayCastとは
わからないものはreferenceを見る!
docs.unity3d.com
まぁいうとオブジェトから目に見えないビームを飛ばして、当たったら反応する、みたいな感じです。
目に見えないのが今回の胆!
さて見えないのをどう可視化するかというと
みなさんご存じLineRendererを使います。
Unity5.5で少し改良が入ったみたい。
APIも少し変わりました。
SetVerticsCountがなくなってnumPositionsを使うようになったとか、あとは頂点数もいじれますね。
今回目指すもの
RayCastのヒットしたタグが'Point'というものであればその位置にポインターを合わせる、という方法です。
まずは先ほど作ったシーンのController、今回はRightControllerにLineRendererのコンポーネントを付けます。
設定するところはここ。
- Material
- Positions
- Width
この3つです。
Material
今回はMaterialを静的につけます。
まずは
Project -> Materialで作成、その後Materialの中身をこう設定します。
このMaterialをLineRendererのMaterialにD&Dしてくっつけます。
Positions
これはデフォルトでSize2になってるとおもうので0に変更してください。
Width
デフォルト値は1ですが太すぎるので0.01ぐらい?に設定する。
ここまでできたら次はコードです。
こんな感じで書いていきます。
あとは処理させたいことを書いていくだけ!
注意
Start()二行目のnumPotisionsはいくつLineを書くためのPositionをいれるか?という設定なのでここでは始点と終点の2つなので2と設定しています。設定しないと"LineRenderer.SetPosition index out of bounds!"とエラーが出るのでご注意を。
Point
当たってないときはEnableをFalseにして消すこと。
RayCastではoutの引数を取ってその中にHitした情報が渡されるのでhit.pointと書いているのは当たったところのWorld座標を取ってこれるのでそれをLineRendererの終点にしている、というわけです。
今回は以上です。
簡単でしたが終わります。
不明点、間違いはコメントいただけると嬉しいです。