//姿勢を取得する(生データ) private void GetPoseActionDataRaw(string ActionPath, out InputPoseActionData_t data, ETrackingUniverseOrigin UniverseOrigin = ETrackingUniverseOrigin.TrackingUniverseStanding, string RestrictToDevicePath = "") { ReadyCheck(); //実行可能な状態かチェック EVRInputError inputError = EVRInputError.None; data = new InputPoseActionData_t(); var size = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(InputPoseActionData_t)); ulong handle = GetActionHandle(ActionPath); //無効なハンドルならthrowされる //制約デバイス指定されていれば適用 ulong DeviceHandle = OpenVR.k_ulInvalidInputValueHandle; if (RestrictToDevicePath != "") { DeviceHandle = GetInputSourceHandle(RestrictToDevicePath); //無効なハンドルならthrowされる } //取得処理 inputError = vrinput.GetPoseActionData(handle, UniverseOrigin, PredictedTime, ref data, size, DeviceHandle); if (inputError == EVRInputError.WrongType) { //姿勢ではない throw new ArgumentException(inputError.ToString()); } if (inputError != EVRInputError.None) { //致命的エラー throw new IOException(inputError.ToString()); } return; }