Всем привет. Заболел коронавирусом и сижу дома, балдею, наконец-то появилось время потыкать Юнити палкой.
Но ближе к делу: пытаюсь сделать сохранение 2 вводимых в строку переменных (name, age).
В интернетах прочитал про метод c json, и по примеру получилось это:
using System.Collections; using System.Collections.Generic; using System; using System.IO; using UnityEngine; public class SaveSystem : MonoBehaviour { public GameObject nameP; private Save sv = new Save(); private string path; //Путь сохранения private void Start() { path = Path.Combine(Application.dataPath, "Save.json"); if (File.Exists(path)) { sv = JsonUtility.FromJson<Save>(File.ReadAllText(path)); Debug.Log("Hello MY CaMRAD " + sv.name + "age " + sv.age); } else nameP.SetActive(true); } private void CheckName(string name) { if (!string.IsNullOrEmpty(name) && name.Length >= 3) { sv.name = name; Debug.Log("Ваше имя: " + name); } else Debug.Log("CaMRAD 4TO ZA DELA VVEDI нормальное имя"); } private void CheckAge(string age) { if (!string.IsNullOrEmpty(age) && age.Length > 0) { sv.age = int.Parse(age); Debug.Log("Ваш возраст: " + age); } else Debug.Log("CaMRAD 4TO ZA DELA VVEDI нормальный возраст"); } private void OnApplicationQuit() { File.WriteAllText(path, JsonUtility.ToJson(sv)); } } [Serializable] public class Save { public string name; public int age; }
В примере автор добавляет скрипт к майн камере, а потом эту майн камеру через On End Edit (String) вешает на Input поле, где выбирает SaveSystem -> Dinamic String -> CheckName (и CheckAge).
У меня так и не получилось выйти на CheckName (и ChaechAge), хотел написать я, но пока писал данный текст я решил эту проблему, но через какой-то костыль. Я поменял
private void CheckName(string name)
на
public void CheckName(string name)
и вот неожиданность теперь можно получить доступ к CheckName для
В примере автор добавляет скрипт к майн камере, а потом эту майн камеру через On End Edit (String) вешает на Input поле, где выбирает SaveSystem -> Dinamic String -> CheckName (и CheckAge).
Потом я меняю public на private в скрипте обратно, и о чудо оно работает как должно и так.
Я понимаю, что дебильно объяснил, потому что новичок и не знаком с терминологией, но я хотел бы узнать почему так получилось и мб есть ли какие-то грубые косяки со стороны кода?
Ответ
Посмотрел видео, посмотрел pastebin с кодом.
В обоих случаях переменные CheckAge и CheckName публичные и доступ через событие кнопки On End Edit получается без лишних костылей.
Прятать переменную в private не получится, потому что компилятор начнет ругаться, что к ней никто не обращается.
Смотрите также:
Комментарии
Брось ссылкой в оригинальную статью, по которой работаешь.
Посмотрел видео, посмотрел pastebin с кодом.
В обоих случаях переменные CheckAge и CheckName публичные и доступ через событие кнопки On End Edit получается без лишних костылей.
Прятать переменную в private не получится, потому что компилятор начнет ругаться, что к ней никто не обращается.
Поменяй сейчас все обратно на public и покажи мне как у тебя сделаны настройки на Input Field.
Действительно. Я наверное поехал просто и в глаза долблюсь.
ты про это?
ты про это?
Да. Все заработало?
Да. Спасибо.
А можешь подсказать статью про перенос данных между сценами? Я сам кучу всяких вариантов нарыл типа через префабы, статическую переменную, какие-то объекты, которые висят во всех сценах. Ну или способ реализации в 2-х словах, статью я сам найду.
Ну или способ реализации в 2-х словах, статью я сам найду.
Взгляни на следующие способы:
- Static переменные (жует int, bool, string, float, double)
- Save/Load (в префсы, в жсон). Берешь то, что ты уже сделал в примере и пробуешь загрузить в другой сцене через класс DataSaver
-
Возможность добавлять комментарии была ограничена
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]