// SDK Object Alias|Utilities|90140 namespace VRTK { using UnityEngine; /// /// The GameObject that the SDK Object Alias script is applied to will become a child of the selected SDK Object. /// [AddComponentMenu("VRTK/Scripts/Utilities/VRTK_SDKObjectAlias")] public class VRTK_SDKObjectAlias : MonoBehaviour { /// /// Valid SDK Objects /// public enum SDKObject { /// /// The main camera rig/play area object that defines the player boundary. /// Boundary, /// /// The main headset camera defines the player head. /// Headset } [Tooltip("The specific SDK Object to child this GameObject to.")] public SDKObject sdkObject = SDKObject.Boundary; protected virtual void OnEnable() { VRTK_SDKManager.SubscribeLoadedSetupChanged(LoadedSetupChanged); ChildToSDKObject(); } protected virtual void OnDisable() { if (!gameObject.activeSelf) { VRTK_SDKManager.UnsubscribeLoadedSetupChanged(LoadedSetupChanged); } } protected virtual void LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) { if (VRTK_SDKManager.ValidInstance() && gameObject.activeInHierarchy) { ChildToSDKObject(); } } protected virtual void ChildToSDKObject() { Vector3 currentPosition = transform.localPosition; Quaternion currentRotation = transform.localRotation; Vector3 currentScale = transform.localScale; Transform newParent = null; switch (sdkObject) { case SDKObject.Boundary: newParent = VRTK_DeviceFinder.PlayAreaTransform(); break; case SDKObject.Headset: newParent = VRTK_DeviceFinder.HeadsetTransform(); break; } transform.SetParent(newParent); transform.localPosition = currentPosition; transform.localRotation = currentRotation; transform.localScale = currentScale; } } }