private void OnComponentUpdated(PlayerComponent.Update update)
        {
            if (!_playerReader.HasAuthority)
            {
                var pos = update.position;
                if (pos.HasValue)
                {
                    this.transform.position = pos.Value.ToVector3();
                }

                var head = update.head;
                if (head.HasValue)
                {
                    _head.UpdateFromTransformData(head.Value);
                }

                var lhand = update.leftHand;
                if (lhand.HasValue)
                {
                    _leftHand.UpdateFromTransformData(lhand.Value);
                }

                var rhand = update.rightHand;
                if (rhand.HasValue)
                {
                    _rightHand.UpdateFromTransformData(rhand.Value);
                }
            }
        }
Пример #2
0
        private void FixedUpdate()
        {
            if (!_playerWriter.HasAuthority)
            {
                return;
            }

            var frameCount = Time.frameCount;

            if (frameCount < _lastSend)
            {
                return;
            }

            _lastSend = frameCount + _sendFrameFrequency;

            var update = new PlayerComponent.Update();
            var change = false;

            var newPos = this.transform.position.ToCoordinates();

            if (newPos.HasChangedBy(_playerWriter.Data.position, _positionSendThreshold))
            {
                update = update.SetPosition(newPos);
                change = true;
            }

            var newHead = _head.transform.ToTransformData();

            if (newHead.HasChangedBy(_playerWriter.Data.head, _positionSendThreshold, _rotationSendThreshold))
            {
                update = update.SetHead(newHead);
                change = true;
            }

            var newLeftHand = _leftHand.transform.ToTransformData();

            if (newLeftHand.HasChangedBy(_playerWriter.Data.leftHand, _positionSendThreshold, _rotationSendThreshold))
            {
                update = update.SetLeftHand(newLeftHand);
                change = true;
            }

            var newRightHand = _rightHand.transform.ToTransformData();

            if (newRightHand.HasChangedBy(_playerWriter.Data.rightHand, _positionSendThreshold, _rotationSendThreshold))
            {
                update = update.SetRightHand(newRightHand);
                change = true;
            }

            if (change)
            {
                _playerWriter.Send(update);
            }
        }