AndrewRosyaev

PlayerSyncPos 7

Dec 23rd, 2015
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.41 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.Networking;
  4.  
  5. public class PlayerSyncPos : NetworkBehaviour
  6. {
  7.     [SyncVar]
  8.     private Vector3 syncPosition;           //Переменная отвечающая за позицию игрока на сервере
  9.     public float lerpSpeed = 20;            //Переменная отвечающая скорость сглаживания позиции и вращения
  10.  
  11.     [SyncVar]
  12.     private Quaternion syncRotation;        //Переменная отвечающая за кватернион вращения игрока на сервере
  13.     [SyncVar] float SyncAnimY;              //Переменная отвечающая за параметр анимации на сервере
  14.     public Animator anim;
  15.     public PlayerCameraControl pcc;
  16.  
  17.     void FixedUpdate ()                     //Функция вызывается автоматически каждые 0.02
  18.     {
  19.         LerpPosition ();                    //Вызываем функцию сглаживание позиции и вращщения для всех клиентов относительно нашего игрока
  20.         TransmitPosition ();                //Отправляем данные игрока с помощью функции, что бы проходить проверку, не является ли данный игрок сервером.
  21.     }
  22.  
  23.     void LerpPosition()                     //Описываем функцию сглаживания позиции которая вызывается в FixedUpdate
  24.     {
  25.         if (!isLocalPlayer)                 //Сглаживаем позицию для всех остальных клиентов, но не для себя с помощью этой проверки
  26.         {
  27.             transform.position = Vector3.Lerp(transform.position, syncPosition, Time.deltaTime*lerpSpeed);      //Сглаживание позиции от текущего положения клиента, до позиции на сервере
  28.             transform.rotation = Quaternion.Lerp(transform.rotation,syncRotation,Time.deltaTime*lerpSpeed);     //То же самое с углом вращения
  29.             float LerpAnimY = Mathf.Lerp(anim.GetFloat("Y"),SyncAnimY,Time.deltaTime*lerpSpeed);
  30.             anim.SetFloat("Y",LerpAnimY);
  31.             //Сглаживание анимациий
  32.         /*  float LerpAnimX = Mathf.Lerp(anim.GetFloat("HeadX"),SyncAnimX, Time.deltaTime*lerpSpeed);          
  33.             anim.SetFloat("HeadX", LerpAnimX);
  34.             float LerpAnimY = Mathf.Lerp(anim.GetFloat("HeadY"),SyncAnimY, Time.deltaTime*lerpSpeed);
  35.             anim.SetFloat("HeadY", LerpAnimY);*/
  36.         }
  37.     }
  38.    
  39.     [Client]                                //Аттрибут делающий функцию выполняемой только у клиентов
  40.     void TransmitPosition()                
  41.     {
  42.         if (isLocalPlayer)                  //Провекрка гласящая о том что мы отправляем данные о своей позиции только если сами являемся игроком
  43.         {
  44.             CmdSendPlayerData(transform.position,transform.rotation,pcc.y);     //Отправка на сервер данных игрока
  45.         }
  46.     }
  47.  
  48.     [Command]                               //Отправляет команду от клиента серверу
  49.     void CmdSendPlayerData(Vector3 pos, Quaternion rot, float characterCameraY)     //Функция принимает данные
  50.     {
  51.         syncPosition = pos;                 //Записывает позицию на стороне сервера
  52.         syncRotation = rot;                 //Записывает вращение
  53.         SyncAnimY = characterCameraY;
  54.     }  
  55.  
  56. }
Add Comment
Please, Sign In to add comment