123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- //======= Copyright (c) Valve Corporation, All rights reserved. ===============
- //
- // Purpose: For controlling in-game objects with tracked devices.
- //
- //=============================================================================
- using UnityEngine;
- using Valve.VR;
- namespace Valve.VR
- {
- public class SteamVR_TrackedObject : MonoBehaviour
- {
- public enum EIndex
- {
- None = -1,
- Hmd = (int)OpenVR.k_unTrackedDeviceIndex_Hmd,
- Device1,
- Device2,
- Device3,
- Device4,
- Device5,
- Device6,
- Device7,
- Device8,
- Device9,
- Device10,
- Device11,
- Device12,
- Device13,
- Device14,
- Device15,
- Device16
- }
- public EIndex index;
- [Tooltip("If not set, relative to parent")]
- public Transform origin;
- public bool isValid { get; private set; }
- private void OnNewPoses(TrackedDevicePose_t[] poses)
- {
- if (index == EIndex.None)
- return;
- var i = (int)index;
- isValid = false;
- if (poses.Length <= i)
- return;
- if (!poses[i].bDeviceIsConnected)
- return;
- if (!poses[i].bPoseIsValid)
- return;
- isValid = true;
- var pose = new SteamVR_Utils.RigidTransform(poses[i].mDeviceToAbsoluteTracking);
- if (origin != null)
- {
- transform.position = origin.transform.TransformPoint(pose.pos);
- transform.rotation = origin.rotation * pose.rot;
- }
- else
- {
- transform.localPosition = pose.pos;
- transform.localRotation = pose.rot;
- }
- }
- SteamVR_Events.Action newPosesAction;
- SteamVR_TrackedObject()
- {
- newPosesAction = SteamVR_Events.NewPosesAction(OnNewPoses);
- }
- private void Awake()
- {
- OnEnable();
- }
- void OnEnable()
- {
- var render = SteamVR_Render.instance;
- if (render == null)
- {
- enabled = false;
- return;
- }
- newPosesAction.enabled = true;
- }
- void OnDisable()
- {
- newPosesAction.enabled = false;
- isValid = false;
- }
- public void SetDeviceIndex(int index)
- {
- if (System.Enum.IsDefined(typeof(EIndex), index))
- this.index = (EIndex)index;
- }
- }
- }
|