2017-02-01 2 views
0

Я работаю над системой сохранения в единстве с использованием кода C#. Как я могу получить такую ​​систему сбережений.PlayerPrefs Equal to GameObject

В моем пустом GameObject У меня есть сценарий, и вот оно:

Counter.cs

public int counter; 

И это все на моем Counter.cs. Теперь, как я могу сохранить и получить его, если он находится внутри GameObject. Я просто хочу получить счетчик внутри Counter.cs.

Могу ли я это сделать так.

SaveAndLoad.cs

public GameObject SaveCounter; 

public void Save(){ 
    PlayerPrefs.SetInt("Player Score", SaveCounter); 
} 

public void Load(){ 
    PlayerPrefs.GetInt("Player Score")); 
} 

Могу ли я сделать что-то вроде этого?

+1

Вы не должны использовать 'PlayerPrefs' для хранения любого игрового хода и т. Д. Но если это то, что вы хотите, то да, вы можете сделать это несколько так. –

+0

Как @ m.rogalski сказал. Это не «путь к дороге». Я считаю, что Unity рекомендует использовать для этого сценарий и сохранить его. Объекты ScriptableObject могут быть сохранены в активах :). Или напишите свой собственный файл gamesave. – Measuring

+0

@ m.rogalski поэтому я могу сделать это вот так: PlayerPrefs.SetInt («Оценка игрока», SaveCounter ()); PlayerPrefs.GetInt («Счет игрока»); – TheGinxx009

ответ

2

Чтобы ответить на ваш вопрос

ВЫ НЕ ДОЛЖНЫ STORE GAME ГОСУДАРСТВА, СВЯЗАННЫЕ С ВЕЩЕЙ В ПЛЕЕР PREFS

Вместо этого вы можете сделать сериализации объект:

[Serializable] 
public class GameState 
{ 
    int m_Score; 

    public int Score 
    { 
     get { return m_Score; } 
     set { m_Score = value; } 
    } 
} 

Затем используйте BinaryFormatter и некоторые вспомогательные объект для сериализации этих данных в файл:

public void StoreGameState(GameState state) 
{ 
    using (BinaryWriter writer = new BinaryWriter(File.OpenWrite("./gamestate.bin"))) 
    { 
     var formatter = new BinaryFormatter() 
     formatter.Serialize(state, writer); 
    } 
} 

public GameState RestoreGameState() 
{ 
    using (BinaryReader reader = new BinaryReader(File.OpenRead("./gamestate.bin"))) 
    { 
     var formatter = new BinaryFormatter() 
     return (GameState)formatter.Deserialize(reader); 
    } 
} 

Затем добавьте GameState в ваш пустой GameObject:

public GameState CurrentProgress; 

и читать всякий раз, когда вы хотите, чтобы сохранить или загрузить использовать два метода я разместил: StoreGameState и RestoreGameState.

Но если вы действительно в хранении такого рода данных в PlayerPrefs то вы можете сделать:

public GameObject SaveCounter; 

public void Save(){ 
    PlayerPrefs.SetInt("Player Score", SaveCounter.GetComponentn<Counter>().counter); 
} 

public void Load(){ 
    SaveCounter.GetComponentn<Counter>().counter = PlayerPrefs.GetInt("Player Score")); 
} 

Который никем не рекомендуется.

+0

Почему это не рекомендуется сэр? – TheGinxx009

+1

@ TheGinxx009 1. 'PlayerPrefs' может хранить только несколько типов (int, float, string). 2. У вас нет контроля над тем, где данные сохраняются. 3.Нет контроля над интерпретацией данных (вам нужно написать обертку для него). 4. 'PlayerPrefs' предназначен для игроков, а не для игроков. Используйте «PlayerPrefs», если вы хотите скрыть окно учебника после того, как пользователь впервые увидел его (например). – Measuring

+0

@ TheGinxx009 Потому что это не постоянный файл. Это в основном отличается для каждой платформы, и для Windows он использует реестр, который никогда не рекомендуется писать. –

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