SlideShare a Scribd company logo
1 of 53
Download to read offline
SteamVR Plugin 2.0 に
アップデートした話
クラスター株式会社 橋本
⾃⼰紹介
• Twitter: @Miya04_NeT
• Unityエンジニア
• 主にUI/UXの実装など
を担当
• 趣味でiOSアプリの開発
をやっています
環境
Unity 2018.3.6f1
アップデート前のバージョン
v1.2.3
アップデート後のバージョン
v2.2.0
アップデートを断念してきた過去
過去2回ほど軽い気持ちでアップデートしようと
して失敗してきました
1回⽬は普通にメジャーアップデート⼊ったっ
ぽいからアップデートしてみるか〜というノ
リで
2回⽬はOculus Touchのメニューの⼊⼒が取
れるかもと思って
アップデートしようとした
モチベーション
Vive Trackerなどの
認識順問題の解決
起こっていた問題
[CameraRig]
Controller(left)
Controller(right)
Camera(head)
Tracker(waist)
Tracker(left foot)
Tracker(right foot)
Controller(left)Controller(right)
waist
Tracker(right foot) Tracker(left foot)
アサインがめちゃくちゃ
Controller(left) Controller(right)
waistTracker(right foot)
Tracker(left foot)
なぜこうなるか
どのトラッカーがどこにアサインさ
れるのかは保証されていない
 → 認識する順番に依存
解決⽅法
あります!!!
が、説明するのもめんどくさいく
らいだるいです
「Tracker 認識順」 で検索
ここで救世主
SteamVR Plugin 2.0!!!!
SteamVR Plugin 2.0での
認識順の解決
1. Manage Vive Trackersからどの場所で認識させるか設定
Left Foot、Right Foot、Waistなど
2. SteamVR_Behaviour_Pose.csのInputSourceに対応す
るものを設定
1. に対応するものに設定
SteamVR Plugin 1.x時代の
SteamVR_Tracked_Objectと同等のもの
これだけ
変更点Pick UP
コントローラーの⼊⼒取得が刷新
CameraRigの構成
コントローラーの⼊⼒取得
各種コントローラーの分岐がいらなく
なる
アクションベースで定義ができる
Input.GetHogeのノリで書ける
(ハプティクスの引数も変わりました)
より細かい振動調整が可能に(?)
CameraRigの構成
1.x <-> 2.0
[CameraRig]
Camera(Head)
Camera(eye)
Camera(ears)
Controller(left)
Controller(right)
[CameraRig]
Camera
Controller(left)
Controller(right)
スッキリ✨
アップデートフロー
⽅針
既存の⼊⼒を置き換える形で
⼿順
1. 古いプラグインの削除
2. 新しいプラグインの追加
3. ⼊⼒周りのコンパイルエラーをコメントアウト
4. アクションの作成
5. コントローラーにアクションをバインディング
6. 新しい⼊⼒に差し替え
1.古いプラグインの削除
使われなくなったスクリプトが残っ
てしまって、エラーを吐きます
思い切って消しましょう
2.新しいプラグインの追加
通常通りのインポートでOK
古いプラグインを使ってた場所でコ
ンパイルエラーが起きます
3.⼊⼒周りのコンパイルエラーを
コメントアウト
⼿順2で出たコンパイルエラーをコメント
アウトしていきます
アクションを定義するためにコンパイ
ルエラーをなくす必要があります
コンパイルエラーが残ったままだと、
アクションを設定する画⾯が出せない
4.アクションの作成
Window>SteamVR Inputからアクショ
ンを設定するWindowを開きます
defaultのアクションを作るか聞かれます
とくにdefaultで定義されたものを使う
予定がなければ作らなくていいと思い
ます
⽣成されるファイル例
プロジェクトのルートディレクトリ
action.json
Assets/SteamVR_Input
定義したアクションを使えるように
するclass類
⼊⼒値
boolean
vector1
vector2
vector3
pose
skeleton
:ボタンのクリックなど
:トリガーを引いている具合など
:トラックパッド、スティックの位置など
:(?)
:コントローラーのいるばしょ
:あたらしく⼊った機能で使うやつ(?)
5.コントローラーにアクションを
バインディング
アクション作成画⾯でOpen
Binding UI を押すとlocalhost:8998
でWeb設定画⾯が⽴ち上がります
デフォルトバインディングの置換
⽣成されるファイル例
プロジェクトのルートディレクトリ
application_generated_unity_プロジェクト名
_コントローラー名.json
unityProject.vrmanifest
6.新しい⼊⼒に差し替え
1. SteamVR_Behaviour_Pose.csをコントローラーのPrefab
にアタッチ
• InputSourceを適切に設定
2. コメントアウトを外す
3. Valve.VRをusingしてみる
• RiderならAlt + Enter
4. 新しい⼊⼒⽅法に差し替え
左⼿のコントローラから⼊⼒を取得する例
無事アップデート完了😆
余裕!
と思いきや、
ビルドしたら動かない 😭
ハマりポイント①
ビルドすると動かなくなる問題
ビルドするとaction.jsonが消える😱
ビルド先がプロジェクトルートディレ
クトリだと発⽣
別のディレクトリにビルドしたら解決
ハマりポイント②
SteamVR_Input_ActionSet_Hogeの初期化
フィールドで初期化すると動かん
トラッカーのバインディング忘れ
トラッカーもコントローラーと同様にWeb
からバインドしてあげる必要があります
その他
認識しているコントローラーやデバイス
しかバインディングできない
Viveをつかってて、Oculus Touchのバ
インディングとかができない 😩
Exampleを真似したらできるかもしれ
ないが…
その他
現在のSteamVR(1.3.20)で起きている問題
Manage Vive Trackersを押しても反応しない
Configure Settings から頑張る
ViveTracker 2.0をManage Vive Trackersしようと
すると、Identify Trackerのボタンが出てこない
もしかしたら、ベースステーションが1.0だから
かも? 🤔
まとめ
SteamVR Plugin 2.0にすれば認識順も簡
単に解決
⼿順を踏めば、アップデートも怖くな
い!
本番環境で動くまでがアップデート作業
(⾃戒)
参考
https://qiita.com/kyourikey/items/
5967018e613b2fd49a1f
https://stackoverflow.com/questions/
55278135/unity-build-error-action-json-
removed-then-not-found-when-building
https://github.com/ValveSoftware/
steamvr_unity_plugin
ご静聴ありがとうございました
よいVR開発ライフを〜👋

More Related Content

What's hot

UniTask入門
UniTask入門UniTask入門
UniTask入門torisoup
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜Mikito Yoshiya
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方光晶 上原
 
ゲーム向けな美味しい乱数を生成する(再アップ版)
ゲーム向けな美味しい乱数を生成する(再アップ版)ゲーム向けな美味しい乱数を生成する(再アップ版)
ゲーム向けな美味しい乱数を生成する(再アップ版)ai BlogOnly
 
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~UnityTechnologiesJapan002
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解したtorisoup
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについてSEGADevTech
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用Sugimoto Chizuru
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターンTakashi Komada
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみたtorisoup
 
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。Narichika Kajihara
 
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~dena_genom
 

What's hot (20)

UniTask入門
UniTask入門UniTask入門
UniTask入門
 
Machinationの紹介
Machinationの紹介Machinationの紹介
Machinationの紹介
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
 
ゲーム向けな美味しい乱数を生成する(再アップ版)
ゲーム向けな美味しい乱数を生成する(再アップ版)ゲーム向けな美味しい乱数を生成する(再アップ版)
ゲーム向けな美味しい乱数を生成する(再アップ版)
 
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
SPAと覚悟
SPAと覚悟SPAと覚悟
SPAと覚悟
 
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターン
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみた
 
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
 
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
 

SteamVR Plugin 2.0 にアップデートした話