В настоящее время я работаю над многопользовательским 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