Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Fusion;
- using System;
- using UnityEngine;
- namespace NV.ST
- {
- [Serializable]
- public struct XRTransform
- {
- public Vector3 Position;
- public Quaternion Rotation;
- }
- [Serializable]
- public struct XRInputData : INetworkInput
- {
- public Vector3 HeadPosition;
- public Quaternion HeadRotation;
- public Vector3 LeftHandPosition;
- public Quaternion LeftHandRotation;
- public Vector3 RightHandPosition;
- public Quaternion RightHandRotation;
- public float HeadOffset;
- }
- public sealed class PlayerXRInput : NetworkBehaviour
- {
- XRInputData m_XRInputData;
- [SerializeField]
- private bool m_OnlySendInputWhenFocused;
- [SerializeField]
- private Transform m_TrackingSpace = null;
- [SerializeField]
- private Transform m_Head = null;
- [SerializeField]
- private Transform m_LeftHand = null;
- [SerializeField]
- private Transform m_RightHand = null;
- public override void Spawned()
- {
- base.Spawned();
- if (Object.HasInputAuthority)
- {
- var networkEvents = FindObjectOfType<NetworkEvents>();
- networkEvents.OnInput.AddListener(OnInput);
- }
- }
- public override void FixedUpdateNetwork()
- {
- base.FixedUpdateNetwork();
- if (GetInput(out XRInputData data))
- {
- if (!Object.HasInputAuthority)
- {
- m_Head.localPosition = data.HeadPosition;
- m_Head.localRotation = data.HeadRotation;
- m_LeftHand.localPosition = data.LeftHandPosition;
- m_LeftHand.localRotation = data.LeftHandRotation;
- m_RightHand.localPosition = data.RightHandPosition;
- m_RightHand.localRotation = data.RightHandRotation;
- var headOffset = m_TrackingSpace.localPosition;
- headOffset.y = data.HeadOffset;
- m_TrackingSpace.localPosition = headOffset;
- }
- }
- }
- private void OnInput(NetworkRunner runner, NetworkInput inputContainer)
- {
- if (m_OnlySendInputWhenFocused && !Application.isFocused)
- {
- return;
- }
- m_XRInputData.HeadPosition = m_Head.localPosition;
- m_XRInputData.HeadRotation = m_Head.localRotation;
- m_XRInputData.LeftHandPosition = m_LeftHand.localPosition;
- m_XRInputData.LeftHandRotation = m_LeftHand.localRotation;
- m_XRInputData.RightHandPosition = m_RightHand.localPosition;
- m_XRInputData.RightHandRotation = m_RightHand.localRotation;
- m_XRInputData.HeadOffset = m_TrackingSpace.localPosition.y;
- inputContainer.Set(m_XRInputData);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement