рдореИрдВрдиреЗ рд╡реЗрдирд┐рдЯреА рдлреЙрд░ рдпреВрдирд┐рдЯреА 3 рдбреА рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреБрдЯреНрдЯреА рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рд╡рд╛рд▓реНрд╡ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпреВрдирд┐рдЯреА 3 рдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдЕрдкрдбреЗрдЯ рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛ - рдПрдХ рдирдпрд╛, рднрд╛рд░реА рдкреБрди: рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдгред рдЗрд╕рдореЗрдВ рдореМрд▓рд┐рдХ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рджрд┐рдЦрд╛рдИ рджреА рдЬреЛ рдкреБрд░рд╛рдиреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛

рд╣рдореЗрдВ рдПрдХрддрд╛> = 5.4.0 рдФрд░ рдирдП рд╕реНрдЯреАрдорд╡реАрдЖрд░ рдкреНрд▓рдЧрдЗрди рдкреНрд▓рдЧрдЗрди ( GitHub ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдЙрдкрдпреЛрдЧреА pdfs рд╣реИрдВ
\ Assets \ SteamVR \ SteamVR рдПрдХрддрд╛ Plugin.pdf
\ Assets \ SteamVR \ SteamVR рдпреВрдирд┐рдЯреА рдкреНрд▓рдЧрдЗрди - рдЗрдирдкреБрдЯ System.pdf
\ Assets \ SteamVR \ InteractionSystem \ InteractionSystem.pdf
рдФрд░ рджреЛ рдЙрджрд╛рд╣рд░рдг:
\ Assets \ SteamVR \ Simple Sample.unity
\ Assets \ SteamVR \ InteractionSystem \ Samples \ Partners_Example.unity
рдкреНрд▓рдЧрдЗрди рд╕рд┐рдореБрд▓реЗрд╢рди рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣реЗрд▓рдореЗрдЯ рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рдЦреИрд░, рдЕрдм рдХрджрдо рджрд░ рдХрджрдо;
SteamVR рдкреНрд▓рдЧрдЗрди рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ 3 рдбреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ

рдЕрдм рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ Window \ SteamVR Imput

рдПрдХрддрд╛ рдЕрдиреБрдкрд▓рдмреНрдз рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВ (рдпрд╣ \ Assets \ SteamVR \ Input \ ExampleJSON рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ) - рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

Json рдлрд╝рд╛рдЗрд▓реЗрдВ рджрд┐рдЦрд╛рддреА рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧрдЗрди рди рдХреЗрд╡рд▓ Vive рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ Oculus рдФрд░ Windows MR рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдирдП рдЕрдВрдЧреБрд▓реА рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдЬреБрдбрд╝реЗ рд╣реИрдВред
рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдмрд╕ "рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдЕрдм рдЖрдкрдХреЛ рдкреНрд▓реЗрдпрд░ (рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реЗ \ _ \ _ рдПрд╕реЗрдЯреНрд╕ + рд╕реНрдЯреАрдорд╡реАрдЖрд░ / рдЗрдВрдЯрд░рдПрдХреНрд╢рдирд╕рд┐рд╕реНрдЯрдо \ рдХреЛрд░ \ рдкреНрд░реАрдлреИрдмреНрд╕) рдХреЛ рд╕реАрди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореЗрди рдХреИрдорд░рд╛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдореБрд▓реЗрд╢рди рдореЛрдб рдХреЗ рд▓рд┐рдП - рдЗрд╕реЗ рдкреНрд▓реЗрдпрд░ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

\ Assets \ SteamVR \ рдЗрдВрдЯрд░реИрдХреНрд╢рдирд╕рд┐рд╕реНрдЯрдо \ Core \ Icons рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ \ Assets рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдЧрд┐рдЬрд╝рдореЛрд╕ рдХреЛ рдирд╛рдо рджреЗрдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ
рдЖрдк Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирдХрд▓реА рд╣рд╛рде рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛, рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдФрд░ рдкреНрд▓реЗрдпрд░ рдкрд░ рд▓рдЯрдХрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ-> NoSteamVRFallbackObjects-> FallbackHand
рдирдХрд▓реА рд╣рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдбusing System.Collections.Generic; using UnityEngine; using Valve.VR; public class VrSimulatorHandFixer156 : SteamVR_Behaviour_Pose { Valve.VR.InteractionSystem.Hand _hand; protected override void Start() { base.Start(); _hand = this.gameObject.GetComponent<Valve.VR.InteractionSystem.Hand>(); _hand.handType = SteamVR_Input_Sources.RightHand; GameObject broHand = GameObject.Instantiate(_hand.gameObject); Destroy(broHand.GetComponent<VrSimulatorHandFixer156>()); broHand.SetActive(false); _hand.otherHand = broHand.GetComponent<Valve.VR.InteractionSystem.Hand>(); _hand.otherHand.handType = SteamVR_Input_Sources.LeftHand; var spoofMouse = new SpoofMouseAction(); _hand.grabGripAction = spoofMouse; spoofMouse.InitializeDictionariesExposed(_hand.handType); this.poseAction = new Poser_SteamVR_Action_Pose(); } protected override void OnEnable() { } protected override void Update() { _hand.grabGripAction.UpdateValue(SteamVR_Input_Sources.RightHand); } protected override void OnDisable() { } protected override void CheckDeviceIndex() { }
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡реАрдЖрд░ рдореЛрдб рдореЗрдВ - рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ

рд╣рдордиреЗ VR рдЬреЛрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗред рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЯреЗрд▓реАрдкреЛрд░реНрдЯреЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреЗрд▓реАрдкреЛрд░реНрдЯрд┐рдВрдЧ рджреГрд╢реНрдп рдХреЛ \ Assets \ SteamVR \ InteractionSystem \ Teleport / Prefabs рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ TeleportPoint рдХреА рднреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЗрдВ

T рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдирдХрд▓реА рдореЗрдВ рдЯреЗрд▓реАрдкреЛрд░реНрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдПрдХ рдЯреЗрд▓реАрдкреЛрд░реНрдЯреЗрд╢рди рд╕рддрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рдкреНрд▓реЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ TeleportArea.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ \ Assets \ SteamVR \ InteractionSystem \ Teleport \ Scripts рд╕реЗ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдПрдХ рдХреНрдпреВрдм рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕ рдкрд░ рдЗрдВрдЯрд░рдПрдХреНрдЯреЗрдмрд▓редрдПрд╕рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ \ Assets \ рд╕реНрдЯреАрдорд╡реАрдЖрд░ \ рдЗрдВрдЯрд░реЗрдХреНрд╢рдирд╕рд┐рд╕реНрдЯрдо \ рдХреЛрд░ \ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд▓рдЯрдХрд╛рдПрдВред
рдЕрдм рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рд╣рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдо рдХреНрдпреВрдм рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВрдЧреЗ
рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХреЛрдб using System.Collections; using System.Collections.Generic; using UnityEngine; using Valve.VR.InteractionSystem; public class NewBehaviourScript : MonoBehaviour { private Hand.AttachmentFlags attachmentFlags = Hand.defaultAttachmentFlags & (~Hand.AttachmentFlags.SnapOnAttach) & (~Hand.AttachmentFlags.DetachOthers) & (~Hand.AttachmentFlags.VelocityMovement); private Interactable interactable; // Use this for initialization void Start () { interactable = this.GetComponent<Interactable>(); } private void HandHoverUpdate(Hand hand) { GrabTypes startingGrabType = hand.GetGrabStarting(); bool isGrabEnding = hand.IsGrabEnding(this.gameObject); if (startingGrabType != GrabTypes.None) { // Call this to continue receiving HandHoverUpdate messages, // and prevent the hand from hovering over anything else hand.HoverLock(interactable); // Attach this object to the hand hand.AttachObject(gameObject, startingGrabType, attachmentFlags); } else if (isGrabEnding) { // Detach this object from the hand hand.DetachObject(gameObject); // Call this to undo HoverLock hand.HoverUnlock(interactable); } } }
рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд▓рдЧрдЗрди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ in \ Assets \ SteamVR \ InterionSystem \ Samples \ Scripts \ InteractableExample.cs
рдФрд░ рдлрд┐рд░ рд╣рдо рд╡рд╣ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ - рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ
Player.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдЬреЛрдбрд╝реЗрдВ
[SteamVR_DefaultAction("PlayerMove", "default")] public SteamVR_Action_Vector2 a_move; [SteamVR_DefaultAction("PlayerRotate", "default")] public SteamVR_Action_Vector2 a_rotate; [SteamVR_DefaultAction("MenuClick", "default")] public SteamVR_Action_Boolean a_menu;
рд╡реИрдз рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ \ Assets \ SteamVR \ Input рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐:
private void Update() { bool st = a_menu.GetStateDown(SteamVR_Input_Sources.Any); if (st) { this.transform.position = new Vector3(0, 0, 0); } else { Camera camera = this.GetComponentInChildren<Camera>(); Quaternion cr = Quaternion.Euler(0, 0, 0); if (camera != null) { Vector2 r = a_rotate.GetAxis(SteamVR_Input_Sources.RightHand); Quaternion qp = this.transform.rotation; qp.eulerAngles += new Vector3(0, rx, 0); this.transform.rotation = qp; cr = camera.transform.rotation; } Vector2 m = a_move.GetAxis(SteamVR_Input_Sources.LeftHand); m = Quaternion.Euler(0, 0, -cr.eulerAngles.y) * m; this.transform.position += new Vector3(mx / 10, 0, my / 10); } }
рдкреВрд░реНрдг Player.cs рдХреЛрдб //======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Player interface used to query HMD transforms and VR hands // //============================================================================= using UnityEngine; using System.Collections; using System.Collections.Generic; namespace Valve.VR.InteractionSystem { //------------------------------------------------------------------------- // Singleton representing the local VR player/user, with methods for getting // the player's hands, head, tracking origin, and guesses for various properties. //------------------------------------------------------------------------- public class Player : MonoBehaviour { [Tooltip( "Virtual transform corresponding to the meatspace tracking origin. Devices are tracked relative to this." )] public Transform trackingOriginTransform; [Tooltip( "List of possible transforms for the head/HMD, including the no-SteamVR fallback camera." )] public Transform[] hmdTransforms; [Tooltip( "List of possible Hands, including no-SteamVR fallback Hands." )] public Hand[] hands; [Tooltip( "Reference to the physics collider that follows the player's HMD position." )] public Collider headCollider; [Tooltip( "These objects are enabled when SteamVR is available" )] public GameObject rigSteamVR; [Tooltip( "These objects are enabled when SteamVR is not available, or when the user toggles out of VR" )] public GameObject rig2DFallback; [Tooltip( "The audio listener for this player" )] public Transform audioListener; public bool allowToggleTo2D = true; [SteamVR_DefaultAction("PlayerMove", "default")] public SteamVR_Action_Vector2 a_move; [SteamVR_DefaultAction("PlayerRotate", "default")] public SteamVR_Action_Vector2 a_rotate; [SteamVR_DefaultAction("MenuClick", "default")] public SteamVR_Action_Boolean a_menu; //------------------------------------------------- // Singleton instance of the Player. Only one can exist at a time. //------------------------------------------------- private static Player _instance; public static Player instance { get { if ( _instance == null ) { _instance = FindObjectOfType<Player>(); } return _instance; } } //------------------------------------------------- // Get the number of active Hands. //------------------------------------------------- public int handCount { get { int count = 0; for ( int i = 0; i < hands.Length; i++ ) { if ( hands[i].gameObject.activeInHierarchy ) { count++; } } return count; } } //------------------------------------------------- // Get the i-th active Hand. // // i - Zero-based index of the active Hand to get //------------------------------------------------- public Hand GetHand( int i ) { for ( int j = 0; j < hands.Length; j++ ) { if ( !hands[j].gameObject.activeInHierarchy ) { continue; } if ( i > 0 ) { i--; continue; } return hands[j]; } return null; } //------------------------------------------------- public Hand leftHand { get { for ( int j = 0; j < hands.Length; j++ ) { if ( !hands[j].gameObject.activeInHierarchy ) { continue; } if ( hands[j].handType != SteamVR_Input_Sources.LeftHand) { continue; } return hands[j]; } return null; } } //------------------------------------------------- public Hand rightHand { get { for ( int j = 0; j < hands.Length; j++ ) { if ( !hands[j].gameObject.activeInHierarchy ) { continue; } if ( hands[j].handType != SteamVR_Input_Sources.RightHand) { continue; } return hands[j]; } return null; } } //------------------------------------------------- // Get Player scale. Assumes it is scaled equally on all axes. //------------------------------------------------- public float scale { get { return transform.lossyScale.x; } } //------------------------------------------------- // Get the HMD transform. This might return the fallback camera transform if SteamVR is unavailable or disabled. //------------------------------------------------- public Transform hmdTransform { get { if (hmdTransforms != null) { for (int i = 0; i < hmdTransforms.Length; i++) { if (hmdTransforms[i].gameObject.activeInHierarchy) return hmdTransforms[i]; } } return null; } } //------------------------------------------------- // Height of the eyes above the ground - useful for estimating player height. //------------------------------------------------- public float eyeHeight { get { Transform hmd = hmdTransform; if ( hmd ) { Vector3 eyeOffset = Vector3.Project( hmd.position - trackingOriginTransform.position, trackingOriginTransform.up ); return eyeOffset.magnitude / trackingOriginTransform.lossyScale.x; } return 0.0f; } } //------------------------------------------------- // Guess for the world-space position of the player's feet, directly beneath the HMD. //------------------------------------------------- public Vector3 feetPositionGuess { get { Transform hmd = hmdTransform; if ( hmd ) { return trackingOriginTransform.position + Vector3.ProjectOnPlane( hmd.position - trackingOriginTransform.position, trackingOriginTransform.up ); } return trackingOriginTransform.position; } } //------------------------------------------------- // Guess for the world-space direction of the player's hips/torso. This is effectively just the gaze direction projected onto the floor plane. //------------------------------------------------- public Vector3 bodyDirectionGuess { get { Transform hmd = hmdTransform; if ( hmd ) { Vector3 direction = Vector3.ProjectOnPlane( hmd.forward, trackingOriginTransform.up ); if ( Vector3.Dot( hmd.up, trackingOriginTransform.up ) < 0.0f ) { // The HMD is upside-down. Either // -The player is bending over backwards // -The player is bent over looking through their legs direction = -direction; } return direction; } return trackingOriginTransform.forward; } } //------------------------------------------------- void Awake() { SteamVR.Initialize(true); //force openvr if ( trackingOriginTransform == null ) { trackingOriginTransform = this.transform; } } //------------------------------------------------- private IEnumerator Start() { _instance = this; while (SteamVR_Behaviour.instance.forcingInitialization) yield return null; if ( SteamVR.instance != null ) { ActivateRig( rigSteamVR ); } else {
рд░рди рд╡рд┐рдВрдбреЛ \ рд╕реНрдЯреАрдорд╡реАрдЖрд░ рдЗрдореНрдкреБрдЯ, рдбрд┐рдлреЙрд▓реНрдЯ рд╕реЗрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реЗрдЬреЗрдВ, рдЕрдм "рдУрдкрди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдпреВрдЖрдИ" рдЪреБрдиреЗрдВ (рд╕реНрдЯреАрдо рд╡реАрдЖрд░ рдХреЛ рдЪрд╛рд▓реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЪрд╛рд▓реВ рд╣реИ)

рдХрдВрдЯреНрд░реЛрд▓рд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЯреИрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЦреБрд▓рддрд╛ рд╣реИ - рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╣рдо рдкреНрд▓реЗрдпрд░рдореВрд╡ рдХреЛ рдмрд╛рдПрдВ TRACKPAD рдкрд░ рд▓рдЯрдХрд╛рдПрдВрдЧреЗ (рдорд┐рд░рд░ рдореЛрдб рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ), рдкреНрд▓реЗрдпрд░ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдЯреНрд░реИрдХ рдХрд░реЗрдВ, рдФрд░ рдореЗрдиреВ рдХреБрдВрдЬреА рдкрд░ рдореЗрдиреВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдХрдВрдЯреНрд░реЛрд▓рд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред
рдкреНрд▓реЗрдпрд░ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рд╣рдо рдирдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ

рдкреНрд▓реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рдкрд░рд┐рдпреЛрдЬрдирд╛
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯреАрдордЖрд░рдЖрд░ рдЗрдореНрдкреНрдпреВрдЯ рдореЗрдВ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХрддрд╛ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдХреЛрдб рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕реАрдзреЗ рдЬрд╕реНрд╕рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЬреЛрдЦрд┐рдо рд╣реИ рдЬрд┐рд╕реЗ рдкрдХрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд▓рдЧрдЗрди рдХреЗ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП - рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ - рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝реЗрдВред