Передача данных между сценами с помощью U-Net - PullRequest
1 голос
/ 11 января 2020

В настоящее время я работаю над многопользовательским FPS в Unity 3D с U- Net (я знаю, что u- net устарела), и мне интересно перенести строку ввода, которая вводится в мою сцену лобби на имя игрока, которое я могу использовать, чтобы показать статистику во время раунда.

Вот что я придумал:

public class NameSetter :MonoBehaviour
{
    private static string userName;
    public static string GetUserName()
    {
        return userName;
    }
    public void SetUserName(string _usern)
    {
        userName = _usern;
    }
}

Функция SetUserName () привязана к атрибуту OnValueChanged поля ввода.

Вот соответствующий код из моего класса Player:

public class Player : NetworkBehaviour
{
    [SyncVar]
    private string playername;

    public string PlayerName
    {
        get { return playername; }
        set { playername = value; }
    }

    void Awake()
    {
        playername = NameSetter.GetUserName();
        _deaths = 0;
        killCount = 0;
        damageDealt = 0;
        ResetPlayer(false); // resets player health and plays a respawn effect
    }
}

При запуске кода на двух отдельных клиентах имена пользователей заканчиваются тем, что они вводят имя хоста.

Я также пытался установить имя пользователя на другой сценарий в методе OnStartClient в этом случае, на хосте имя пользователя хоста появилось дважды, а на клиенте оказалось, что оно работает нормально. (Это для двух игроков, когда третий присоединяется, все идет наперекосяк: P)

Вот соответствующий код:

[RequireComponent(typeof(Player))]
public class PlayerSetup : NetworkBehaviour
{
    public override void OnStartClient()
    {
        base.OnStartClient();

        string netId = GetComponent<NetworkIdentity>().netId.ToString();
        Player curr = GetComponent<Player>();
        curr.PlayerName = NameSetter.GetUserName();
        GameManager.AddPlayer(netId, curr);
        // The GameManager refers to a dictionary of players and id's that is used to keep track of all 
        // the players
    }

Я предполагаю, что эти проблемы как-то связаны с полем stati c, однако я не могу найти лучшую альтернативу для передачи переменной между моими Лобби и моя онлайн-сцена, тем более что альтернатива должна быть динамичной c. Заранее спасибо! Любая помощь приветствуется: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...