Можно ли изменить место куда сохраняются PlayerPrefs?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение Saltant 09 май 2023, 16:34

skroliks писал(а):А по поводу основного вопроса может что подскажете?

Ну сохранения сделать просто, я недавно в своей синглплеерной игре делал сейвы.
Просто берешь класс создаешь с нужными полями. Создаешь метод Save, в нем создаешь экземпляр этого класса, заполняешь все поля данными, потом класс сериализуешь например с помощью ProtoBuf и сохраняешь в файл, можно в бинарном виде. Этот файл можешь хранить локально на устройстве или залить в облако например, в обратную сторону загрузить игру так же - десериализуешь этот файл в объект класса и забираешь нужные данные из него присваивая их игровым переменным.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение skroliks 10 май 2023, 09:02

Saltant писал(а):
skroliks писал(а):А по поводу основного вопроса может что подскажете?

Ну сохранения сделать просто, я недавно в своей синглплеерной игре делал сейвы.
Просто берешь класс создаешь с нужными полями. Создаешь метод Save, в нем создаешь экземпляр этого класса, заполняешь все поля данными, потом класс сериализуешь например с помощью ProtoBuf и сохраняешь в файл, можно в бинарном виде. Этот файл можешь хранить локально на устройстве или залить в облако например, в обратную сторону загрузить игру так же - десериализуешь этот файл в объект класса и забираешь нужные данные из него присваивая их игровым переменным.


Дак я вот это все так и сделал, но все везде в интернетах учат, что переменные нужно делать приватными, чтобы нельзя было их изменять извне (чего?) - а из-за этого у меня и возникают подобные вопросы - как не делать лишнюю работу, сохранив при этом максимальную защиту?
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение 1max1 10 май 2023, 15:37

Думаю, ты упадешь в обморок, когда узнаешь какая инкапсуляция в компонентах на ECS архитектуре. В целом, да, зачастую нужно инкапсулировать код, но не нужно упарываться и закрывать вообще все подряд, а потом строить миллион обходных путей для доступа. В той же системе сохранений, можно легко сделать все поля открытыми, просто потому что все они должны быть доступны для записи внешнему коду в любой момент. Вообще, как говорил Джейсон Стетхем, - "Все зависит от контекста", так что без конкретно примера сложно сказать что нужно, а что нет %%-
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение Saltant 10 май 2023, 16:43

skroliks писал(а):Дак я вот это все так и сделал, но все везде в интернетах учат, что переменные нужно делать приватными, чтобы нельзя было их изменять извне (чего?)

Делай всегда приватные переменные и если тебе нужен к ним доступ, то инкапсулируй по мере востребованности.
Я всегда пишу вначале пиватную или [SerializeField] это тоже приватная но отобразится в инспекторе юнити. Далее если мне нада к ней доступ я создаю свойство get и/или set
Если например мне нужен доступ только как get к этой переменной и она неизменяема, то я её помечаю как readonly. Например с ивентами так делаю, создаю readonly UnityEvent someEvent = new(); и просто возвращаю его в публичном свойстве get как public UnityEvent GetSomeEvent() => someEvent; Так скрипты могут обратиться к этому GetSomeEvent, подписаться и отписаться, но не могут перезаписать его.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение skroliks 11 май 2023, 09:01

Saltant писал(а):
skroliks писал(а):Дак я вот это все так и сделал, но все везде в интернетах учат, что переменные нужно делать приватными, чтобы нельзя было их изменять извне (чего?)

Делай всегда приватные переменные и если тебе нужен к ним доступ, то инкапсулируй по мере востребованности.
Я всегда пишу вначале пиватную или [SerializeField] это тоже приватная но отобразится в инспекторе юнити. Далее если мне нада к ней доступ я создаю свойство get и/или set
Если например мне нужен доступ только как get к этой переменной и она неизменяема, то я её помечаю как readonly. Например с ивентами так делаю, создаю readonly UnityEvent someEvent = new(); и просто возвращаю его в публичном свойстве get как public UnityEvent GetSomeEvent() => someEvent; Так скрипты могут обратиться к этому GetSomeEvent, подписаться и отписаться, но не могут перезаписать его.


А как защищать переменные от взлома программами типа АртМани, где ищут по значению адрес переменной и изменяют значение на нужное? Достаточно ли будет сделать вот так переменные нужные приватными и изменять их только через метод внутри класса, или это бесполезно и они не так работают?
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение waruiyume 11 май 2023, 09:47

Вы же сами ответили на свой вопрос "ищут по значению адрес переменной", т.е. нет разницы приватная она или нет.
Можно попробовать устанавливать, те переменные, которые захотят взломать, через сеттер, записывая контрольную сумму в другую переменную. И при следующей установки значения, если старое значение не совпадает со старым хешем, показывать пользователю МПХ на весь экран.
Вообще, на форуме есть тема с античит плагином, вроде от товарища Фокс, искать влом.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Можно ли изменить место куда сохраняются PlayerPrefs?

Сообщение DbIMok 11 май 2023, 16:10

вот например https://habr.com/ru/articles/589899/
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Пред.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 19