Advertisement
AndrewRosyaev

PlayerSyncPos.cs

Nov 22nd, 2015
688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.97 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.  
  14.  
  15.     void FixedUpdate ()                     //Функция вызывается автоматически каждые 0.02
  16.     {
  17.         LerpPosition ();                    //Вызываем функцию сглаживание позиции и вращщения для всех клиентов относительно нашего игрока
  18.         TransmitPosition ();                //Отправляем данные игрока с помощью функции, что бы проходить проверку, не является ли данный игрок сервером.
  19.     }
  20.  
  21.     void LerpPosition()                     //Описываем функцию сглаживания позиции которая вызывается в FixedUpdate
  22.     {
  23.         if (!isLocalPlayer)                 //Сглаживаем позицию для всех остальных клиентов, но не для себя с помощью этой проверки
  24.         {
  25.             transform.position = Vector3.Lerp(transform.position, syncPosition, Time.deltaTime*lerpSpeed);      //Сглаживание позиции от текущего положения клиента, до позиции на сервере
  26.             transform.rotation = Quaternion.Lerp(transform.rotation,syncRotation,Time.deltaTime*lerpSpeed);     //То же самое с углом вращения
  27.         }
  28.     }
  29.    
  30.     [Client]                                //Аттрибут делающий функцию выполняемой только у клиентов
  31.     void TransmitPosition()                
  32.     {
  33.         if (isLocalPlayer)                  //Провекрка гласящая о том что мы отправляем данные о своей позиции только если сами являемся игроком
  34.         {
  35.             CmdSendPosition(transform.position);        //Отправка на сервер нашей позиции
  36.             CmdSendRotation(transform.rotation);        //Отправка на сервер текущий угол вращения
  37.         }
  38.     }
  39.  
  40.     [Command]                               //Отправляет команду от клиента серверу
  41.     void CmdSendPosition(Vector3 pos)       //Функция принимает данные о позиции
  42.     {
  43.         syncPosition = pos;                 //И записывает их на стороне сервера
  44.     }
  45.     [Command]
  46.     void CmdSendRotation(Quaternion rot)    //Функция принимает данные о вращении
  47.     {
  48.         syncRotation = rot;                 //И записывает их на стороне сервера
  49.     }  
  50.  
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement