Спасибо, что выбрали Фотон!
Чтобы получить пользовательское свойство, я рекомендую использовать метод TryGetValue
следующим образом:
hash = PhotonNetwork.CurrentRoom.CustomProperties;
object temp;
string key = rpk.activeGame;
if (hash.TryGetValue(key, out temp))
{
if (temp is bool)
{
bool activeGame = (bool)temp;
}
else
{
// unexpected custom property value type
}
}
else
{
// custom property not found
}
Если пользовательское свойство еще не доступно, дождитесь обратного вызова IInRoomCallbacks.OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
( ссылочный API ).
Другие примечания и рекомендации:
private void GameRoomSetup (string pOne, string pTwo, int pOneColor, int pTwoColor)
Не уверен, поддерживается ли он или есть хорошая идея передать несколько параметров методу PUN RPC.
Для отладки журнала Dictionary
или Hashtable
вы можете использовать метод SupportClass.DictionaryToString()
.
так вместо
Debug.Log(hash);
использование
Debug.Log(SupportClass.DictionaryToString(hash));
Избегайте вызова дорогих методов, таких как GameObject.Find
:
GameObject gameMenu = GameObject.Find ("GameMenu");
Также здесь у вас есть повторяющиеся вызовы на gameMenu.GetComponent<SubMenu>()
, хотя бы один раз позвоните и кешируйте найденный результат компонента, если таковой имеется.
gameMenu.GetComponent<SubMenu> ().UpdatePlayers (pOne, pTwo, pOneColor, pTwoColor);
gameMenu.GetComponent<SubMenu> ().StartGameSetup ();
Сравнение строк не должно выполняться с использованием оператора ==
. По крайней мере, используйте метод Equal и правильный тип StringComparison. Прочитайте " Как сравнить строки в C # ".
// If you are a player, change the active buttons that are visible.
if (PhotonNetwork.NickName == pOne || PhotonNetwork.NickName == pTwo)
{
gameMenu.GetComponent<GameButtonManager> ().GameStart ();
}
Кроме того, почему вы используете псевдоним, чтобы проверить, является ли он игроком один или два? возможно используйте ActorNumber или пользовательский индекс игрока. Или используйте количество игроков, если в комнате только 2 игрока.