2016-04-08 1 views
0

Я делаю FPS, автономную игру Я хочу сохранить разные данные игроков, такие как имя, последний уровень игры, оставшееся здоровье, для каждого другого игрока, так что мы можем сделать это через игроков prefeb?unity3d PlayersPrefeb, можем ли мы сохранить информацию о игроках разных игроков через сборник игроков?

ответ

1

Для Сохранить плеер Info, конвертировать его в Json с JsonUtility.ToJson затем сохранить его с PlayerPrefs.SetString.

Для нагрузки Info-плеер, загрузить его с PlayerPrefs.GetStrin г Преобразовать строку JSON в класс с JsonUtility.FromJson.

Полный пример:

class Playerinfo 
{ 
    public string name; 
    public string lastLevelPlayed; 
    public float remainingHealth; 
} 

Сохранить:

Playerinfo playerInstance = new Playerinfo(); 
    playerInstance.name = "Farhan Ali"; 
    playerInstance.lastLevelPlayed = "5"; 
    playerInstance.remainingHealth = 50; 

    //convert to Json 
    string SerializedPlayer = JsonUtility.ToJson(playerInstance); 

    //Save Player Info 
    PlayerPrefs.SetString("pInfo", SerializedPlayer); 

нагрузки:

//Load Player Info 
    string loadInfo = PlayerPrefs.GetString("pInfo"); 

    Playerinfo loadedInstance = JsonUtility.FromJson<Playerinfo>(loadInfo); 
    Debug.Log("Player name is " + loadedInstance.name); 
+0

Спасибо большое .. и отдельное спасибо за использование мое имя в примере для привлечение ... :-p –

+0

еще одно я могу получить эти поля, как имя и индекс уровня, по сцене. Как в Gui, я пишу имя игрока, тогда как я могу получить его в скрипт, потому что я немного не знаком с union3d @Programmer –

+0

Добро пожаловать. Я не понимаю ваш второй вопрос. Если вы можете создать новый вопрос с примером того, о чем вы говорите, это было бы хорошо. – Programmer

1

Да, вы можете.

Лучше всего создать класс для игрока и использовать процесс сериализации из .NET:

[Serializable] 
public class Player 
{ 
    public string Name { get; private set; } 
    public int Points { get; set; } 
    public Player(string name, int points) { 
     this.Name = name; 
     this.Points = points; 
    } 
    public static void SaveData(Player item, string id) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     bf.Serialize(ms, item as Player); 
     PlayerPrefs.SetString(id, Convert.ToBase64String(ms.GetBuffer())); 
    } 

    public static Player GetPlayer(string id) 
    { 
     if (PlayerPrefs.HasKey(id) == false) { return null; } 
     string str = PlayerPrefs.GetString(id); 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(Convert.FromBase64String(str)); 
     return bf.Deserialize(ms) as Player; 
    } 
} 

идентификатор представляет текущий игрок. Это должно происходить из входа в плеер, я бы предположил. Вам по-прежнему нужно знать, кто играет с какого-либо входа.

У меня есть более подробное объяснение того, как сделать это более гибким. here.

+0

Большое вам спасибо –

Смежные вопросы