Extensions методы для Photon Cloud и Unity3D

Одно из самых популярных свойств в PhotonCloud является CustomProperties для игроков и комнат.

Обычно их используют вот так:

        PhotonNetwork.player.SetCustomProperties(new Hashtable
        {
            {"points", 0},
            {"name", Storage.PlayerName},
        });


Здесь есть много минусов:
1. Всегда нужна задавать новое имя для синхронизации(+1 переменная)
2. Дублировать код для получения и записи значения
3. Приведение типов…

Воспользуемся методами расширений. Пишем enum и сами методы:

//список свойств для каждого игрока, которые нужно синхронизировать по сети
public enum PlayerProperty
{
    Kills,
    Dies,
    Name,
    Skin,
    WeaponLeft,
}

//методы расширения для PhotonPlayer
public static class PhotonPlayerExtensions
{
    //установить значение
    public static void Set<T>(this PhotonPlayer player, PlayerProperty prop, T val)
    {
        var props = new Hashtable();
        props["p" + (int)prop] = val;
        player.SetCustomProperties(props);
    }
    //получить значение
    public static T Get<T>(this PhotonPlayer player, PlayerProperty prop)
    {
        object val;
        if (player.customProperties.TryGetValue("p" + (int)prop, out val))
        {
            return (T)val;
        }

        return default(T);
    }
}


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

Пример где-то в коде игры:


var kills = photonView.owner.Get<int>(PlayerProperty.Kills);
kills++;
photonView.owner.Set(PlayerProperty.Kills, kills);


Я привел пример для игроков, но таким же образом можно добавить методы и для комнат.

Удачи!

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.