なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ

書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

2022/06/17

OpenVR SDK でデバイスのアイコンパスを取得したい

カテゴリー:VRC#Unity

今回は、 OpenVR SDK にてコントローラーや各トラッカーなどのデバイスのアイコンの場所を取得してみようと思います。
といっても、やり方はカンタンで、ランタイムパスと GetStringTrackedDeviceProperty で取得できるパスを組み合わせれば OK です。
ということで:

var capacity1 = OpenVR.System.GetStringTrackedDeviceProperty(trackedDeviceIndex, ETrackedDeviceProperty.Prop_ResourceRoot_String, null, 0, ref pError);
var sb1 = new StringBuilder((int)capacity1);
OpenVR.System.GetStringTrackedDeviceProperty(trackedDeviceIndex, ETrackedDeviceProperty.Prop_ResourceRoot_String, sb1, capacity1, ref pError);

var capacity2 = OpenVR.System.GetStringTrackedDeviceProperty(trackedDeviceIndex, ETrackedDeviceProperty.Prop_NamedIconPathDeviceOff_String, null, 0, ref pError);
var sb2 = new StringBuilder((int)capacity2);
OpenVR.System.GetStringTrackedDeviceProperty(trackedDeviceIndex, ETrackedDeviceProperty.Prop_NamedIconPathDeviceOff_String, sb2, capacity2, ref pError);

var icon = sb2.ToString().Substring(sb2.ToString().LastIndexOf("/", StringComparison.Ordinal) + 1);
ResourcePath = Path.Combine(OpenVR.RuntimePath(), "drivers", sb1.ToString(), "resources", "icons", icon);

いろいろやっているのは、 Prop_NamedIconPathDeviceOff_String で取得できるのが {resource_root}/path みたいな形式になっているからです。
この場合欲しいのは一番最後のファイル名だけなので、手動でそこを取りだしています。

ということで、メモでした。