You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Valve.VR
 | 
						|
{
 | 
						|
    public class SteamVR_TrackingReferenceManager : MonoBehaviour
 | 
						|
    {
 | 
						|
        private Dictionary<uint, TrackingReferenceObject> trackingReferences = new Dictionary<uint, TrackingReferenceObject>();
 | 
						|
 | 
						|
        private void OnEnable()
 | 
						|
        {
 | 
						|
            SteamVR_Events.NewPoses.AddListener(OnNewPoses);
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnDisable()
 | 
						|
        {
 | 
						|
            SteamVR_Events.NewPoses.RemoveListener(OnNewPoses);
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnNewPoses(TrackedDevicePose_t[] poses)
 | 
						|
        {
 | 
						|
            if (poses == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            for (uint deviceIndex = 0; deviceIndex < poses.Length; deviceIndex++)
 | 
						|
            {
 | 
						|
                if (trackingReferences.ContainsKey(deviceIndex) == false)
 | 
						|
                {
 | 
						|
                    ETrackedDeviceClass deviceClass = OpenVR.System.GetTrackedDeviceClass(deviceIndex);
 | 
						|
 | 
						|
                    if (deviceClass == ETrackedDeviceClass.TrackingReference)
 | 
						|
                    {
 | 
						|
                        TrackingReferenceObject trackingReference = new TrackingReferenceObject();
 | 
						|
                        trackingReference.trackedDeviceClass = deviceClass;
 | 
						|
                        trackingReference.gameObject = new GameObject("Tracking Reference " + deviceIndex.ToString());
 | 
						|
                        trackingReference.gameObject.transform.parent = this.transform;
 | 
						|
                        trackingReference.trackedObject = trackingReference.gameObject.AddComponent<SteamVR_TrackedObject>();
 | 
						|
                        trackingReference.renderModel = trackingReference.gameObject.AddComponent<SteamVR_RenderModel>();
 | 
						|
                        trackingReference.renderModel.createComponents = false;
 | 
						|
                        trackingReference.renderModel.updateDynamically = false;
 | 
						|
 | 
						|
                        trackingReferences.Add(deviceIndex, trackingReference);
 | 
						|
 | 
						|
                        trackingReference.gameObject.SendMessage("SetDeviceIndex", (int)deviceIndex, SendMessageOptions.DontRequireReceiver);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        trackingReferences.Add(deviceIndex, new TrackingReferenceObject() { trackedDeviceClass = deviceClass });
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private class TrackingReferenceObject
 | 
						|
        {
 | 
						|
            public ETrackedDeviceClass trackedDeviceClass;
 | 
						|
            public GameObject gameObject;
 | 
						|
            public SteamVR_RenderModel renderModel;
 | 
						|
            public SteamVR_TrackedObject trackedObject;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |