今回は、 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
みたいな形式になっているからです。
この場合欲しいのは一番最後のファイル名だけなので、手動でそこを取りだしています。
ということで、メモでした。