Как исправить код, чтобы другие игроки видели ваше оружие?

Чтобы другие игроки могли видеть ваше оружие в игре, вам понадобится использовать сетевые функции и синхронизировать состояние оружия между всеми клиентами в сети.

Первое, что вам нужно сделать, это установить сетевой компонент для вашего объекта оружия, чтобы он мог быть разделён между всеми игроками в игре. В Unity это можно сделать, добавив компонент NetworkIdentity к объекту оружия. Это позволит Unity отслеживать и синхронизировать состояние объекта оружия между всеми клиентами.

После добавления NetworkIdentity вам нужно создать новый компонент для синхронизации состояния оружия. Для этого создайте новый C# скрипт и прикрепите его к вашему объекту оружия. В этом скрипте вы должны объявить переменные и методы, которые будут отвечать за синхронизацию состояния оружия.

using UnityEngine;
using UnityEngine.Networking;

public class WeaponSync : NetworkBehaviour
{
    [SyncVar]
    private bool isEquipped = false; // переменная, которая будет синхронизироваться между клиентами

    // добавьте другие переменные для синхронизации состояния оружия, например, пули, анимации и т.д.

    void Update()
    {
        if (!isLocalPlayer)
            return;

        // код для управления оружием на локальном клиенте
    }

    [Command]
    void CmdUpdateEquipStatus(bool isEquipped)
    {
        this.isEquipped = isEquipped;
    }
}

В этом коде мы сначала объявляем переменную isEquipped, которая будет синхронизироваться между всеми клиентами. Затем мы определяем метод Update(), который будет вызываться на локальном клиенте для управления оружием. Далее у нас есть метод CmdUpdateEquipStatus(), который будет вызываться на сервере при изменении состояния оружия. Этот метод обновляет значение переменной isEquipped на сервере и автоматически синхронизирует её со всеми клиентами.

Теперь вам нужно добавить этот компонент на объект оружия в сцене Unity. Обратите внимание, что этот скрипт должен быть прикреплен только на локальных объектах игрока, которые он видит, чтобы сетевые вызовы работали корректно.

После добавления компонента WeaponSync, когда игрок подбирает или снимает оружие, вы можете вызвать команду CmdUpdateEquipStatus() с новым значением isEquipped на сервере. Например, если игрок подбирает оружие, код может выглядеть так:

void OnTriggerEnter(Collider other)
{
    if (!isLocalPlayer || other.gameObject.tag != "Weapon")
        return;

    // подобрать оружие
    // ...

    // вызвать команду для обновления состояния оружия на сервере
    CmdUpdateEquipStatus(true);
}

Теперь, когда игрок подбирает или снимает оружие, его состояние оружия будет синхронизировано с другими игроками в сети. Каждый клиент будет видеть, что у игрока есть оружие и может выполнять соответствующие действия в игре, основанные на состоянии оружия.