Недавно я взялся за настройку пользовательских свойств в Photon. Мне удалось выяснить, как установить настраиваемые свойства, но не получить настраиваемые свойства. Моя хэш-таблица находится в моем скрипте контроллера плеера, а место, где я устанавливаю (и где я хочу получить) свойства, находится в циклическом скрипте.
Из RoundSystem:
private IEnumerator TeamBalance()
{
angelCount = Mathf.Floor(PhotonNetwork.PlayerList.Length * angelPercent);
currentAngels = angelCount;
currentPlayers = PhotonNetwork.PlayerList.Length;
foreach (var item in PhotonNetwork.PlayerList)
{
var itemPhotonView = (PhotonView)item.TagObject;
itemPhotonView.RPC("SetPlayerTeam", item, citiString);
}
for (int i = 0; i < angelCount;)
{
var item = PhotonNetwork.PlayerList[Random.Range(0, PhotonNetwork.PlayerList.Length)];
var itemPhotonView = (PhotonView)item.TagObject;
if (/* random player selected's, AKA, item's team == citiString */)
{
itemPhotonView.RPC("SetPlayerTeam", item, angelString);
i++;
}
}
yield return null;
//the reason this is in an IEnumerator with 'yield return null'
//is because I plan to add a waiting period once I figure this out
//it's for the game loop
}
Из PlayerController:
[PunRPC]
public void SetPlayerTeam(string teamString)
{
//in the class: private ExitGames.Client.Photon.Hashtable playerProperties;
if (!playerProperties.ContainsKey("team"))
{
playerProperties.Add("team", teamString);
}
playerProperties["team"] = teamString;
PhotonNetwork.LocalPlayer.SetCustomProperties(playerProperties);
}
В начале раунда определенный процент (в данном случае 1/3) игроков выбирается в качестве «ангела». Проверка здесь необходима, потому что в случае нескольких ангелов вы не хотите, чтобы уже существующий ангел считался новым изменением. (Кроме того, вероятно, важно знать, как получить пользовательские свойства, если я собираюсь их использовать.) Если я не включу проверку в RoundSystem, результатом будет 2 гражданина и 1 ангел (в тесте с 3 игроки). Кроме того, если вы видите какой-либо спагетти-код, который можно было бы улучшить, не стесняйтесь сообщить мне об этом. :)