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

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

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

Сообщение Saltant 03 май 2023, 00:11

skroliks писал(а):арена, рейтинги, возможно кланы будут..

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

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

Сообщение skroliks 04 май 2023, 10:30

Saltant писал(а):
skroliks писал(а):арена, рейтинги, возможно кланы будут..

Ну эт я хз, мне кажется если клиент отправляет данные что типа "я прошел арену, я взял такой то рейтинг" то клиент туда че угодно налепить может, прогресс как то должен валидироваться на серверной стороне.


Вот и вопрос - например, как? Может с помощью ключа зашифрованного как-то? Как API сайтов работают?
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

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

Сообщение skroliks 04 май 2023, 14:15

1max1 писал(а):Нужно писать собственную систему сейвов


Сел, вот, писать свою систему и еще такой вопрос возник: я теперь, вместо сохранений в PlayerPrefs, делаю записи в отдельный класс всех нужных переменных (чтобы потом пихать их в Json и доставать оттуда при загрузке) и чтобы облегчить себе работу хочу сделать так, чтобы можно было перезаписывать переменные либо одним методом, который будет принимать переменную и ее имя и присваивать в соответствии с этим значение, либо массив с различными типами данных (этих всех параметров), чтобы опять же через отдельный метод по соответствующему ключу доставать или записывать (изменять) значения этих же переменных. Все это для того, чтобы не писать для КАЖДОЙ нужной переменной отдельный метод, который будет ее изменять (внутри этого же класса, естественно, чтобы сохранялась инкапсуляция). И вот тут суть вопроса: а реально ли вообще так сделать?

Потому что если идти путем создания метода, который принимает имя параметра и значение - а затем присваивает это значение переменной в нашем классе в соответствии с ее именем - не понятно как это вообще сделать (пока-что). Попытаюсь сразу на примерах кода показывать, чтобы было понятнее:

Есть переменные, какие нужно сохранить:

Синтаксис:
Используется csharp
public class class1
{
int param1;
string param2;

Допустим, мы хотим сохранить параметр1:
//Отправляем его в класс для сохранения
ChangeValues(param1, param1.name);
}

Там класс и сам метод выглядят примерно так:
public class class2
{
int param1 { get; private set; }
string param2 { get; private set; }

public ChangeValues(param, param.name)
{
//Нам надо найти параметр по имени param.name (для удобства имена одинаковые) и изменить его на значение param
- И вот тут вопрос: как именно это правильно сделать? Потому что пока ответов не нашел.. Т.е. сделать чтобы переменная с таким же именем изменила свое значение на указанное:
param1 = param;
}

}


Или другой вариант - загнать в классе переменных все переменные в один массив и через опять же отдельный метод - доставать или перезаписывать их. Например:

Есть общий класс, определяющий переменные для работы с ними при записи и чтении:

Синтаксис:
Используется csharp
[System.Serializable]
public static SomeClass
{
int param1;
string param2;
}

В классе с переменными мы записываем их в массив:
public class class2
{
int param1{ get; private set; }
string param2{ get; private set; }

SomeClass[] = new SomeClass[] {param1, param2};

//И вот тут как раз и главная неувязочка, ведь объединили мы переменные разных типов в один класс, чтобы они в одном массиве находились, а не разных, и могли обращаться
только к нему в поисках нужной переменной для записи или чтения  - но {param1, param2} не являются здесь SomeClass, поэтому мы и не можем создать такой массив.. И как это сделать? Нашел что-то про structure - но по факту, это то же что и мой этот класс обобщенный. И как тогда здесь поступить?
}


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

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

Сообщение 1max1 04 май 2023, 14:26

Вот и вопрос - например, как?

Уже сказали как, нужен сервер с симуляцией, когда клиент отправляет на сервер не "я нахожусь вот тут", а "я нажал кнопку вперед, передвинь меня".
с помощью ключа зашифрованного как-то?

Ключ нужен для того чтобы другие не перехватили пакет. Смысла в ключе нет если сам отправитель пакета злоумышленник. Какой бы супер пупер зашифрованный пакет с содержимым "я прошел арену" ты бы не отправил, его все равно можно взломать. Вообще все что происходит на клиенте ломается при желании.
Нам надо найти параметр по имени param.name (для удобства имена одинаковые) и изменить его на значение param

Почитай про рефлексию, но я не понял зачем это тебе надо, просто усложнить код в 100500 раз?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Saltant 04 май 2023, 19:37

skroliks писал(а):
Saltant писал(а):
skroliks писал(а):арена, рейтинги, возможно кланы будут..

Ну эт я хз, мне кажется если клиент отправляет данные что типа "я прошел арену, я взял такой то рейтинг" то клиент туда че угодно налепить может, прогресс как то должен валидироваться на серверной стороне.


Вот и вопрос - например, как? Может с помощью ключа зашифрованного как-то? Как API сайтов работают?

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

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

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

1max1 писал(а):
Почитай про рефлексию, но я не понял зачем это тебе надо, просто усложнить код в 100500 раз?


Как зачем? Я же написал - наоборот чтобы упростить все и не писать под КАЖДУЮ переменную, необходимую для записи, методы для ее изменения и чтения. Что-то типа отправил переменную указав только ее имя и значение - и в нужном файле (объекте) изменяется переменная с таким же именем на указанное значение..
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

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

Сообщение skroliks 06 май 2023, 09:03

Saltant писал(а):Не знаю, я по этой же причине отказался в свою синглплеерную игру ачивки делать ибо они теряют актуальность, когда любой +- пряморукий может их все вскрыть сразу.


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

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

Сообщение 1max1 06 май 2023, 12:39

skroliks писал(а):
1max1 писал(а):
Почитай про рефлексию, но я не понял зачем это тебе надо, просто усложнить код в 100500 раз?


Как зачем? Я же написал - наоборот чтобы упростить все и не писать под КАЖДУЮ переменную, необходимую для записи, методы для ее изменения и чтения. Что-то типа отправил переменную указав только ее имя и значение - и в нужном файле (объекте) изменяется переменная с таким же именем на указанное значение..

Я ж и говорю, что бы указывать в таком стеле MyTools.SetVar("my_var", 123); нужна рефлексия или switch case километровый, либо миллиард условий if. Я тупо не вижу в этом смысла если можно взять объект и поменять ему значение переменной напрямую и сохранить его в джсон. Мне абсолютно не понятно нафига тут обертка эта нужна. Если ты думаешь что так проще, то нет не проще, тебе в голове надо держать миллион строковых значений, вместо того чтобы получать подсказки от intellisense.

skroliks писал(а):
Saltant писал(а):Не знаю, я по этой же причине отказался в свою синглплеерную игру ачивки делать ибо они теряют актуальность, когда любой +- пряморукий может их все вскрыть сразу.


Ну, не знаю.. Как по мне это что-то типа: волка бояться - в лес не ходить.. Должно же быть какое-то адекватное и не слишком сложное решение?

Скачать анти-читы с ассет стора, это самое просто что ты можешь сделать.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Saltant 06 май 2023, 15:22

skroliks писал(а):
Saltant писал(а):Не знаю, я по этой же причине отказался в свою синглплеерную игру ачивки делать ибо они теряют актуальность, когда любой +- пряморукий может их все вскрыть сразу.


Ну, не знаю.. Как по мне это что-то типа: волка бояться - в лес не ходить.. Должно же быть какое-то адекватное и не слишком сложное решение?

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

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

Сообщение skroliks 07 май 2023, 13:28

1max1 писал(а):Я ж и говорю, что бы указывать в таком стеле MyTools.SetVar("my_var", 123); нужна рефлексия или switch case километровый, либо миллиард условий if. Я тупо не вижу в этом смысла если можно взять объект и поменять ему значение переменной напрямую и сохранить его в джсон. Мне абсолютно не понятно нафига тут обертка эта нужна. Если ты думаешь что так проще, то нет не проще, тебе в голове надо держать миллион строковых значений, вместо того чтобы получать подсказки от intellisense..



Вы может не дочитали или не так поняли что я имею в виду.. Попытаюсь объяснить еще раз на пальцах: вместо PlayerPrefs я создал класс (объект) где находятся все переменные, чтобы потом записывать их в тот же json и чтобы читать их оттуда (данные для игры) и загружать туда из json (для загрузки). Но, эти переменные используются в игре в различных других классах, изменяются, и, соответственно, чтобы сохранялась инкапсуляция - мне нужно изменять их только внутри этого класса (объекта), создавая отдельные методы под каждую переменную для ее изменения. Так вот, чтобы не делать миллион методов - назрел вопрос как сделать это все одним шаблонным методом - варианты как я это вижу можно сделать я и изложил в топике.. А какое решение предложили бы вы, если мои не подходят, для такого случая?
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

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

Сообщение skroliks 07 май 2023, 13:32

Saltant писал(а):Нету ни каких нормальных решений кроме как перенести игру на сервер и делать это ради ачивок каких нить, нафиг надо. Так же как и делать авивки которые клиент может взломать и быть там где то в топе рейтинга например среди других игроков, короче всё это не стоит усилий имхо, или сразу делать нормально или не делать вообще.


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

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

Сообщение Saltant 07 май 2023, 19:19

skroliks писал(а):
Saltant писал(а):Нету ни каких нормальных решений кроме как перенести игру на сервер и делать это ради ачивок каких нить, нафиг надо. Так же как и делать авивки которые клиент может взломать и быть там где то в топе рейтинга например среди других игроков, короче всё это не стоит усилий имхо, или сразу делать нормально или не делать вообще.


И как это вообще реализовывается (в двух словах, в общем)? Просто у меня пока даже представления нет о таком - Unity же делает все для работы приложения у клиента, а не на сервере - как это вообще делать то тогда? С помощью чего или каких инструментов и программ? Или я то-то недопонимаю и не туда думаю и смотрю?

Как понять "Unity же делает все для работы приложения у клиента, а не на сервере"?
У юнити есть новый мультиплеерный движок. Работает по принципу RPC, как и все остальные собсна мультиплееры до этого.
https://docs-multiplayer.unity3d.com/
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

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

Сообщение skroliks 08 май 2023, 09:36

Saltant писал(а):Как понять "Unity же делает все для работы приложения у клиента, а не на сервере"?
У юнити есть новый мультиплеерный движок. Работает по принципу RPC, как и все остальные собсна мультиплееры до этого.
https://docs-multiplayer.unity3d.com/


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

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

Сообщение Saltant 09 май 2023, 02:59

skroliks писал(а):Это же не может быть один и тот же билд?

По сути это один и тот же билд, с разницей лишь в том что серверный ты собираешь как "Dedicated Server". Дальше он стартует как Host и когда ты пишешь код, в методах ты проверяешь где выполняется этот код, если хочешь чтоб на сервере то добавляешь условие типа if(isServer) такие переменные появляются когда MonoBehaviour заменяется на NetworkBehaviour в конкретном скрипте. В общем, изучай документацию, примеры и видео на ютуб как это работает, там нет ничего сложного если понять принцип.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

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

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

Saltant писал(а):
skroliks писал(а):Это же не может быть один и тот же билд?

По сути это один и тот же билд, с разницей лишь в том что серверный ты собираешь как "Dedicated Server". Дальше он стартует как Host и когда ты пишешь код, в методах ты проверяешь где выполняется этот код, если хочешь чтоб на сервере то добавляешь условие типа if(isServer) такие переменные появляются когда MonoBehaviour заменяется на NetworkBehaviour в конкретном скрипте. В общем, изучай документацию, примеры и видео на ютуб как это работает, там нет ничего сложного если понять принцип.


Хорошо, спасибо! А по поводу основного вопроса может что подскажете? У меня вся работа по игре встала из за этого (( Как мне сделать систему сохранения, чтобы сохранялась инкапсуляция и при этом не писать миллион методов для изменения параметров, а сделать один универсальный? Или это не реально вообще и я зря трачу на подобное время?
skroliks
UNIт
 
Сообщения: 60
Зарегистрирован: 10 сен 2022, 13:30

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28


cron