Как сохранить на каждом уровне уникальные значения PlayerPrefs?
Доброго времени суток!
Помогите пожалуйста разобраться как сделать сохранение значений PlayerPrefs на каждом уровне!
То есть допустим у меня есть 3 уровня, они поэтапно открываются с сохранением жизней и патронов, но когда я хочу переиграть предыдущий уровень, у меня сохраняется последнее значение жизней и патронов, а как сделать так, что бы на каждом уровне сохранялись значения которые были при прохождении предыдущего уровня?
То есть например после первого уровня у меня осталось 50 жизней и они переносятся на второй, а после прохождения второго осталось 30 жизней и у меня возникает потребность переиграть второй уровень и надо что бы на этом уровней сохранились 50жизней которые были потеряны после первого уровня, а у меня получается, что когда я захожу на второй уровень у меня грузятся 30 жизней которые после третьего уровня :(
Я бы сделал это так:
-Если в конце лвл вылазят кнопки или что то такое то можно просто в действия кнопки (public void urButton()) ВписатьPlayerPrefs.Save();
-Если нет ничего такого то сделать триггер и к нему забацать скрипт:
public void OnTriggerEnter(Collider other){
if(other.tag == "Player"){
PlayerPrefs.Save();//Сохраняем ВСЕ значения ПЛеерПрефс
}
}
KraGenDeveloper, вот в том то и дело, что я не понимю как вот это "TutOtkudaBratZnachenieHP" взять с другого скрипта! У меня вылетает ошибка: InfoLvl.cs(9,34): error CS0103: The name 'levelHP' does not exist in the current context
KeysCG, смотри сделай в скрипте с ХП переменную статик тобиш public static int LevelHP;
просто добавь Static
а с другого скрипта вызывай
например название скрипта с ХП "HPscript" HPscript.LevelHP;
и можешь вот это что выше юзать в PlayerPrefs я сам так делал норм всё работает
KraGenDeveloper, когда я делаю статик, у меня вылазит следующая ошибка:
error CS0176: Member 'LevelHPslider.levelHP' cannot be accessed with an instance reference; qualify it with a type name instead
KeysCG, оно в Слайдере я так понял, ну тогда сделать переменную
public static int HPLevel;
public Slider LevelHP;//если оно в Слайдере
public void Update(){
HPLevel = LevelHP.value;
}
а потом с другого скрипта получаем это HPLevel если не работает то лучше всего будет кинуть части скрипта где связано с ХП и тогда я смогу более корректно помочь)
KraGenDeveloper, теперь у меня скрипт смерти игрока ругается походу из за статика :(
Вот скрипт жизней какой изначально был:
Вот скрипт смерти игрока:
Вот скрипт для сохранения (пока что я сделал сохранение кнопками для теста через эвент):
Вот в таком состоянии ругается на нон статик! Может можно как то сохранить int без статика, а то выходит что скрипт смерти ругается и я боюсь когда начну сохранять патроны, то у меня куча скриптов поломается? :(
KeysCG, вопрос: зачем отдельный скрипт под события делать ? можно же сделать всё в одном скрипте
вот всё в одном скрипте
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
public class MainScript : MonoBehaviour
{
public GameObject Player;//игрок
public Slider SliderHP;//Слайдер хп
int HP = 100;//хп
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
SliderHP.value = HP;//хп игрока на слайдере
if(SliderHP.value < 10){//смэрть
SceneManager.LoadScene(0);
}
}
public void SaveHP(){//сохраняем хп
int LvlHP = Convert.ToInt32(SliderHP.value);//конвертируем Значение слайдера в целое число
PlayerPrefs.SetInt("LevelHP",LvlHP);
}
public void LoadHP(){//грузим хп
SliderHP.value = PlayerPrefs.GetInt("LevelHP");
}
}
у меня этот скрипт вышел без ошибок. Совет: лучше всё что касается игрока делать в одном/двух скриптах а не делать 100 скриптом по 10 строчек в каждом.