Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using UnityEngine.Networking;
- public class PlayerSyncPos : NetworkBehaviour
- {
- [SyncVar]
- private Vector3 syncPosition; //Переменная отвечающая за позицию игрока на сервере
- public float lerpSpeed = 20; //Переменная отвечающая скорость сглаживания позиции и вращения
- [SyncVar]
- private Quaternion syncRotation; //Переменная отвечающая за кватернион вращения игрока на сервере
- void FixedUpdate () //Функция вызывается автоматически каждые 0.02
- {
- LerpPosition (); //Вызываем функцию сглаживание позиции и вращщения для всех клиентов относительно нашего игрока
- TransmitPosition (); //Отправляем данные игрока с помощью функции, что бы проходить проверку, не является ли данный игрок сервером.
- }
- void LerpPosition() //Описываем функцию сглаживания позиции которая вызывается в FixedUpdate
- {
- if (!isLocalPlayer) //Сглаживаем позицию для всех остальных клиентов, но не для себя с помощью этой проверки
- {
- transform.position = Vector3.Lerp(transform.position, syncPosition, Time.deltaTime*lerpSpeed); //Сглаживание позиции от текущего положения клиента, до позиции на сервере
- transform.rotation = Quaternion.Lerp(transform.rotation,syncRotation,Time.deltaTime*lerpSpeed); //То же самое с углом вращения
- }
- }
- [Client] //Аттрибут делающий функцию выполняемой только у клиентов
- void TransmitPosition()
- {
- if (isLocalPlayer) //Провекрка гласящая о том что мы отправляем данные о своей позиции только если сами являемся игроком
- {
- CmdSendPosition(transform.position); //Отправка на сервер нашей позиции
- CmdSendRotation(transform.rotation); //Отправка на сервер текущий угол вращения
- }
- }
- [Command] //Отправляет команду от клиента серверу
- void CmdSendPosition(Vector3 pos) //Функция принимает данные о позиции
- {
- syncPosition = pos; //И записывает их на стороне сервера
- }
- [Command]
- void CmdSendRotation(Quaternion rot) //Функция принимает данные о вращении
- {
- syncRotation = rot; //И записывает их на стороне сервера
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement