Advertisement
Guest User

Untitled

a guest
Dec 31st, 2021
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.98 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine;
  5. using UnityEngine.XR;
  6. using Photon.Pun;
  7. using Unity.XR.CoreUtils;
  8. using UnityEngine.InputSystem.XR;
  9. using RootMotion.Demos;
  10. using RootMotion.FinalIK;
  11. using UnityEngine.XR.Interaction.Toolkit;
  12.  
  13. public class NetworkPlayer : MonoBehaviourPun, IPunObservable, IPunInstantiateMagicCallback
  14. {
  15.     public VRIK ik;
  16.     public Transform Head;
  17.     public Transform LeftHand;
  18.     public Transform RightHand;
  19.    
  20.     private PhotonView PhotonView;
  21.  
  22.     private Transform HeadRig;
  23.     private Transform LeftHandRig;
  24.     private Transform RightHandRig;
  25.  
  26.     private NetworkTransform rootNetworkT = new NetworkTransform();
  27.     private NetworkTransform headNetworkT = new NetworkTransform();
  28.     private NetworkTransform leftHandNetworkT = new NetworkTransform();
  29.     private NetworkTransform rightHandNetworkT = new NetworkTransform();
  30.     [Tooltip("The speed of interpolating remote IK targets.")] public float proxyInterpolationSpeed = 20f;
  31.     [Tooltip("Max interpolation error square magnitude. IK targets snap to latest synced position if current interpolated position is farther than that.")] public float proxyMaxErrorSqrMag = 4f;
  32.     // Start is called before the first frame update
  33.     void Start()
  34.     {
  35.         PhotonView = GetComponent<PhotonView>();
  36.         XROrigin rig = FindObjectOfType<XROrigin>();
  37.        
  38.         HeadRig = rig.transform.Find("Camera Offset/Main Camera");
  39.         LeftHandRig = rig.transform.Find("Camera Offset/LeftHand Controller");
  40.         RightHandRig = rig.transform.Find("Camera Offset/RightHand Controller");
  41.  
  42.         if (PhotonView.IsMine)
  43.         {
  44.             foreach (var item in GetComponentsInChildren<Renderer>())
  45.             {
  46.                 //item.enabled = false;
  47.             }
  48.         }
  49.     }
  50.  
  51.     // Update is called once per frame
  52.     void Update()
  53.     {
  54.         if(PhotonView.IsMine)
  55.         {
  56.             MapPosition(Head, HeadRig);
  57.             MapPosition(LeftHand, LeftHandRig);
  58.             MapPosition(RightHand, RightHandRig);
  59.             // Update IK target velocities (for interpolation)
  60.             rootNetworkT.ReadVelocitiesLocal(ik.references.root);
  61.             headNetworkT.ReadVelocitiesLocal(ik.solver.spine.headTarget);
  62.             leftHandNetworkT.ReadVelocitiesLocal(ik.solver.leftArm.target);
  63.             rightHandNetworkT.ReadVelocitiesLocal(ik.solver.rightArm.target);
  64.  
  65.             // Update IK target positions/rotations
  66.             rootNetworkT.ReadTransformLocal(ik.references.root);
  67.             headNetworkT.ReadTransformLocal(ik.solver.spine.headTarget);
  68.             leftHandNetworkT.ReadTransformLocal(ik.solver.leftArm.target);
  69.             rightHandNetworkT.ReadTransformLocal(ik.solver.rightArm.target);
  70.         }
  71.  
  72.         headNetworkT.ApplyRemoteInterpolated(Head, proxyInterpolationSpeed, proxyMaxErrorSqrMag);
  73.         leftHandNetworkT.ApplyRemoteInterpolated(LeftHand, proxyInterpolationSpeed, proxyMaxErrorSqrMag);
  74.         rightHandNetworkT.ApplyRemoteInterpolated(RightHand, proxyInterpolationSpeed, proxyMaxErrorSqrMag);
  75.     }
  76.  
  77.     void MapPosition(Transform target,Transform rigTransform)
  78.     {
  79.         target.position = rigTransform.position;
  80.         target.rotation = rigTransform.rotation;
  81.     }
  82.     public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
  83.     {
  84.         if (stream.IsWriting)
  85.         {
  86.             // Send NetworkTransform data
  87.             rootNetworkT.Send(stream);
  88.             headNetworkT.Send(stream);
  89.             leftHandNetworkT.Send(stream);
  90.             rightHandNetworkT.Send(stream);
  91.         }
  92.         else
  93.         {
  94.             // Receive NetworkTransform data
  95.             rootNetworkT.Receive(stream);
  96.             headNetworkT.Receive(stream);
  97.             leftHandNetworkT.Receive(stream);
  98.             rightHandNetworkT.Receive(stream);
  99.         }
  100.     }
  101.  
  102.     public void OnPhotonInstantiate(PhotonMessageInfo info)
  103.     {
  104.        
  105.     }
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement