Не двигается второй игрок по сети в игре пинг понг на юнити 2D C#

Рейтинг: 0Ответов: 0Опубликовано: 05.06.2023

первый игрок на хосте и на клиенте двигается, а второй игрок не двигается! Помогите пожалуйста!!! Завтра защита проекта)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Netcode;

public class Paddle : NetworkBehaviour
{
    public bool isPlayer1;
    public float speed;
    public Rigidbody2D rb;
    public Vector3 startPosition;

    public NetworkVariable<float> movement = new NetworkVariable<float>(default,
       NetworkVariableReadPermission.Everyone,
       NetworkVariableWritePermission.Owner);

    private void Start()
    {
        startPosition = transform.position;
    }

    private void Update()
    {
        if (!IsOwner)
            return;

        if (isPlayer1)
        {
            if (IsServer)
            {
                movement.Value = Input.GetAxisRaw("Vertical");
            }
        }
        else
        {
            if (IsClient)
            {
                movement.Value = Input.GetAxisRaw("Vertical2");
            }
        }

        rb.velocity = new Vector2(rb.velocity.x, movement.Value * speed);
    }



    public void Reset()
    {
        if (!IsServer) return;

        rb.velocity = Vector2.zero;
        transform.position = startPosition;
    }
}
       
using System.Collections.Generic;
using TMPro;
using Unity.Netcode;
using UnityEngine;

public class NetworkPlayerSpawner : NetworkBehaviour
{
    private Dictionary<ulong, NetworkPlayer> _idToPlayerMap = new Dictionary<ulong, NetworkPlayer>();

    public GameObject player1Prefab;
    public GameObject player2Prefab;

    public override void OnNetworkSpawn()
    {
        if (!IsServer)
            return;

        NetworkManager.OnClientConnectedCallback += OnClientConnected;
        base.OnNetworkSpawn();
    }

    public NetworkPlayer GetPlayerById(ulong id)
    {
        return _idToPlayerMap[id];
    }

    private void OnClientConnected(ulong playerId)
    {
        GameObject prefab = GetPrefabForPlayer(playerId);
        if (prefab == null)
            return;

        GameObject playerObject = Instantiate(prefab);
        NetworkObject networkObject = playerObject.GetComponent<NetworkObject>();

        playerObject.transform.position = GetSpawnPosition(playerId);
        playerObject.transform.localScale = new Vector3(1f, 3f, 1f);

        networkObject.SpawnWithOwnership(playerId);
        _idToPlayerMap.Add(playerId, playerObject.GetComponent<NetworkPlayer>());
    }

    private GameObject GetPrefabForPlayer(ulong playerId)
    {
        if (playerId == 0)
            return player1Prefab;
        else if(playerId == 1)
            return player2Prefab;

        return null;
    }

    private Vector3 GetSpawnPosition(ulong playerId)
    {
        if (playerId == 0)
            return new Vector3(-6.75f, -2.87f, 0f);
        
        else if (playerId == 1)
            return new Vector3(6.75f, -2.87f, 0f);

        return Vector3.zero;
    }
}

using System;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class NetworkPlayer : NetworkBehaviour
{
    private static NetworkVariable<bool> _limitCount = new NetworkVariable<bool>();

    private NetworkPlayerSpawner _spawnManager;
    private Paddle _paddle;

    public float speed;
    public Rigidbody2D rb;

    // public bool isPlayer1;

    public override void OnNetworkSpawn()
    {
        if (IsHost)
        {
            _spawnManager = FindObjectOfType<NetworkPlayerSpawner>();
            _paddle = GetComponent<Paddle>();
        }
        base.OnNetworkSpawn();
    }
    private void Awake()
    {
        //   _scoreText = GameObject.FindGameObjectWithTag("scoreHost").GetComponent<TextMeshProUGUI>();
        // _clientText = GameObject.FindGameObjectWithTag("textClient").GetComponent<TextMeshProUGUI>();
    }

    private void Start()
    {

        if (IsServer)
        {
            Ball ball = FindObjectOfType<Ball>();
            ball.Launch(); // Запуск мяча на сервере
        }
        if (IsOwner)
        {
            Ball ball = FindObjectOfType<Ball>();
            ball.Launch(); // Запуск мяча на клиенте*/
        }
    }

   

    private void OnScoreChanged(int previousValue, int newValue)
    {
        if (_limitCount.Value)
            return;
        //      _hostText.text = "Host:" + newValue;        

        if (newValue >= 10)
        {
            MyGlobalServerRpc(OwnerClientId);

        }
    }

    private void OnScoreChanged2(int previousValue, int newValue)
    {
        if (_limitCount.Value)
            return;
        //      _clientText.text = "Client:" + newValue;

        if (newValue >= 10)
        {
            MyGlobalServerRpc(OwnerClientId);

        }
    }

    [ServerRpc(RequireOwnership = false)]
    public void MyGlobalServerRpc(ulong winnerId)
    {
        NetworkPlayer winnerPlayer = _spawnManager.GetPlayerById(winnerId);
        if (winnerPlayer != null)
        {
            string winnerName = winnerPlayer.gameObject.name;
            ShowWinnerIdClientRpc(winnerName);
        }
    }


    [ClientRpc]
    private void ShowWinnerIdClientRpc(string winnerId)
    {
        _limitCount.Value = true;
    }    
}




Только первый игрок по сети двигается, а второй нет

в Input managerе у меня стоит за vertical - s и w, а за vertical2 - down и up На рисунке видно как я двигаю первым игроком а второй вообще стоит

Ответы

Ответов пока нет.