2016-10-12 3 views
2

Я немного новичок в единстве, пожалуйста, помогите мне.Единство, сохраняющее foreach?

Как я могу сохранить что-то подобное?

public float GetMoneyPerSec() 
{ 
    float tick = 0; 
    foreach (UpgradeManager item in items) 
    { 
     tick += item.tickValue; 
    } 
    return tick; 
} 
+0

Последующие действия http://stackoverflow.com/questions/39999971/unity-static-member-upgrademanager-tickvalue-cannot-be-accessed-with-an-instan –

+0

Что вы подразумеваете под "save"? Думаю, вы могли бы сохранить результат в переменной? – Serlite

+0

Я могу, но потом я не могу загрузить его обратно. – Kalip

ответ

2

«Сохранить» данные в файле вы можете сериализовать в текстовый документ с использованием либо xml или JSON и десериализуйте его, когда игра запустится. Это более удобно, чем предварительные команды игроков, поскольку вы можете легко или легко копировать или редактировать значения в любом текстовом редакторе.

Для сохранения данных между сценами просто убедитесь, что класс, содержащий данные, является статическим классом (используйте метод singleton) или для класса, который установлен на «не разрушать при загрузке».

+0

Я в настоящее время сохраняю данные между сценами, но у меня есть этот код, который я не могу сделать статичным, поэтому я не могу его сохранить. :/Мне нужен способ сделать его статическим или назначить ему статическую переменную или что-то еще, поэтому я могу ее сохранить и загрузить. – Kalip

+0

Я не уверен, зачем вам нужно, чтобы переменная сама была статичной. Любая переменная в статическом классе будет сохраняться во время выполнения. Метод, который у вас есть, возвращает значение, поэтому, если у вас есть класс с именем SaveData с свойством float с именем Tick, вы можете сказать SaveData.Tick ​​= GetMoneyPerSec(); Результат идет в собственность, и вы можете использовать его там, где хотите. –

1

Вы можете использовать PlayerPrefs. Скажем, у вас есть что-то вроде float tick = GetMoneyPerSec(), то вы храните его:

PlayerPrefs.SetFloat("MoneyPerSec", tick); 

и получить его с помощью:

float f = PlayerPrefs.GetFloat("MoneyPerSec"); 
+0

Я использую сохранение сохранности, нет ли метода сохранить его там? – Kalip

+0

Ознакомьтесь с учебным пособием по сохранению данных из единицы [persistence] (https://unity3d.com/learn/tutorials/topics/scripting/persistence-saving-and-loading-data) – Sakkas

+0

Я сделал, вот как я сделал свой. :/ – Kalip

0

Ответ от Gerard Roche и Sakkas верен.
Для передачи данных между сценами вам нужно всего лишь PlayerPrefs.
на основе кода, способ сохранить ticks является:

public float CalculateMoneyPerSec() 
{ 
    float tick = 0; 
    foreach (UpgradeManager item in items) 
    { 
     tick += item.tickValue; 
    } 
    // save the value after calculation 
    PlayerPrefs.SetFloat("MoneyPerSecond", tick); 
    return tick; 
} 

И получить его из другой сцены:

// Another Scene 
public float GetMoneyPerSec() 
{ 
    float tick = PlayerPrefs.GetFloat("MoneyPerSecond"); 
} 

Сохранение данных в PlayerPrefs считается безопасным, так как PlayerPrefs звонки PlayerPref.Save() когда OnApplicationQuit() к записывать данные на жесткий диск, и это самый эффективный способ передачи данных.

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