WebGL отправка данных в Юнити

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

WebGL отправка данных в Юнити

Сообщение vseinone1 16 апр 2023, 10:36

Помогите разобраться плиз.

Нужно вывести таблицу лидеров в Юнити типа 1 место - Вася - 10.45 сек.

Нужно сделать таблицу лидеров в игре на Unity с получением данных из браузера (Java)
В механике процесса разобрался. Тут все работает. Но у меня несколько вопросов:
1) Я правильно понимаю, что Юнити НЕ МОЖЕТ принять массив данных, а только принимает string, int или float?
2) Как мне тогда выдернуть из getleaderboardentries данные о рейтинге и передать их отдельными запросами в таблицу?



Гайд - https://yandex.ru/dev/games/doc/dg/sdk/ ... board.html - Пункт - Записи лидерборда
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение 1max1 16 апр 2023, 10:56

Если у яндекса нет сдк под юнити на шарпе, то надо написать свой плагин-обертку, как это делать тут написано https://docs.unity3d.com/Manual/webgl-i ... pting.html
Юнити НЕ МОЖЕТ принять массив данных

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

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 16 апр 2023, 12:21

1max1 писал(а):Если у яндекса нет сдк под юнити на шарпе, то надо написать свой плагин-обертку, как это делать тут написано https://docs.unity3d.com/Manual/webgl-i ... pting.html
Юнити НЕ МОЖЕТ принять массив данных

Вроде бы массивы тоже поддерживаются.


Неа нет плагина. И передавать массив нельзя нашел на форуме инфо.

У меня собственно вопрос такой созрел:
1) Мы получаем данные от Java в браузере и можем их вывести в консоль в файле JSLIB. Вопрос - Как я могу вывести данные не в консоль, а в window.alert.

ysdk.getLeaderboards()
.then(lb => {
lb.getLeaderboardEntries('leaderboard2021')
.then(res => console.log(res));
});

Т.е. console.log(res)); я так понимаю RES это результат, а window.alert(res) не работает.
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение Saltant 16 апр 2023, 12:26

vseinone1 писал(а):Помогите разобраться плиз.

Нужно вывести таблицу лидеров в Юнити типа 1 место - Вася - 10.45 сек.

Нужно сделать таблицу лидеров в игре на Unity с получением данных из браузера (Java)
В механике процесса разобрался. Тут все работает. Но у меня несколько вопросов:
1) Я правильно понимаю, что Юнити НЕ МОЖЕТ принять массив данных, а только принимает string, int или float?
2) Как мне тогда выдернуть из getleaderboardentries данные о рейтинге и передать их отдельными запросами в таблицу?



Гайд - https://yandex.ru/dev/games/doc/dg/sdk/ ... board.html - Пункт - Записи лидерборда

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

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 06:45

Saltant писал(а):
vseinone1 писал(а):Помогите разобраться плиз.


Маленько разобрался с темой Json. Возник вопрос - Вот м создаем запрос
ysdk.getLeaderboards()
.then(lb => {
// Получение 10 топов и 3 записей возле пользователя
lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => console.log(res));
});


и получаем ответ

{
leaderboard: {
...
},
ranges: [
{
start: integer,
size: integer
}
],
userRank: integer,
entries: [
{
score: integer,
extraData: string,
rank: integer,
player: {
getAvatarSrc: (size: string) => string,
getAvatarSrcSet: (size: string) => string,
lang: string,
publicName: string,
scopePermissions: {
avatar: string,
public_name: string
},
uniqueID: string,
},
formattedScore: string
},
...
]
}


Вопрос 1:

Как мне конвертировать это в JSON?

Вопрос 2:

Как потом на стороне юнити выдернуть из массива только нужные мне данные а именно Место Имя и очки.
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 06:53

Или получается что я получаю данные и как мне Сериализовать только нужные мне данные из этого массива?

Короче не могу сформулировать мой вопрос, надеюсь поймете

Вот я получаю данные из этого запроса (В ПРОШЛОМ ПОСТЕ ПРИМЕР ОТВЕТА)-
// Получение 10 топов и 3 записей возле пользователя
lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => console.log(res));
});

Что мне надо написать, чтобы получить только данные про имя игрока? Типа xxxxx.publicname или xxxxx.userrang

Вот это xxxxx что?? ))
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение 1max1 17 апр 2023, 07:39

xxxxx это класс/структура с точно такими же типами и именами полей как в json, поля должны быть публичные и класс с атрибутом System.[Serializable].
https://json2csharp.com/ вот тут можно перегонять любой json в класс c# (чуть ниже тулзы примеры и инструкция), потом добавь этот класс к себе в код и получай объект из json так https://docs.unity3d.com/ru/530/ScriptR ... mJson.html
Делать из класса в json так https://docs.unity3d.com/ru/530/ScriptR ... oJson.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 07:54

1max1 писал(а):xxxxx это класс/структура с точно такими же типами и именами полей как в json, поля должны быть публичные и класс с атрибутом System.[Serializable].
https://json2csharp.com/ вот тут можно перегонять любой json в класс c# (чуть ниже тулзы примеры и инструкция), потом добавь этот класс к себе в код и получай объект из json так https://docs.unity3d.com/ru/530/ScriptR ... mJson.html
Делать из класса в json так https://docs.unity3d.com/ru/530/ScriptR ... oJson.html


Спасибо, это более менее понятно, а как мне загнать в Json данные из браузера которые я получаю?
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 07:59

Вот это xxxxx что?? )) Вопрос маленько не правильно задал. Не что это, а ГДЕ ЭТО ВЗЯТЬ ?

В консоле выводятся данные массива без проблем. Как их перевести в Json или хотя бы вывести отдельные данные не могу допереть.


GetleaderboardInfo: function () {
ysdk.getLeaderboards()
.then(lb => {
// С использованием всех значений по умолчанию
lb.getLeaderboardEntries("level1", { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => console.log(res));
});
}



В Консоле все оке, как в инструкции все данные в массиве ( https://yandex.ru/dev/games/doc/dg/sdk/ ... escription )

Но допустим мне надо дернуть leaderbord.name и вывести только его в консоль или отправить в Unity. Как мне выдернуть его из данных массива?
Пишу - console.log(leaderboard.name()); не работает.


А как их перевести в Json
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 09:17

А если перевести в строку через stringify?
Откуда этот массив взять ?

var myJsonString = JSON.stringify(????????);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);
});
}
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение Saltant 17 апр 2023, 09:55

vseinone1 писал(а):А если перевести в строку через stringify?
Откуда этот массив взять ?

var myJsonString = JSON.stringify(????????);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);
});
}

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

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 11:24

Saltant писал(а):
vseinone1 писал(а):А если перевести в строку через stringify?
Откуда этот массив взять ?

var myJsonString = JSON.stringify(????????);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);
});
}

Создаешь объект в javascript с нужными тебе полями, заполняешь, пихаешь его его в JSON.Stringify и то что получилось передаешь через SendMessage в юнити. Там десериализуешь этот json в класс который соответствует созданному объекту в javascript.


Логика ясна, только у меня данные берутся из браузера

GetleaderboardInfo: function () {
ysdk.getLeaderboards()
.then(lb => {
// С использованием всех значений по умолчанию
lb.getLeaderboardEntries("level1", { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => JSON.stringify(res));
var myJsonString = JSON.stringify(res);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);

Так можно реализовать? Помогите с синтаксисом плиз
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение Saltant 17 апр 2023, 12:30

vseinone1 писал(а):
Saltant писал(а):
vseinone1 писал(а):А если перевести в строку через stringify?
Откуда этот массив взять ?

var myJsonString = JSON.stringify(????????);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);
});
}

Создаешь объект в javascript с нужными тебе полями, заполняешь, пихаешь его его в JSON.Stringify и то что получилось передаешь через SendMessage в юнити. Там десериализуешь этот json в класс который соответствует созданному объекту в javascript.


Логика ясна, только у меня данные берутся из браузера

GetleaderboardInfo: function () {
ysdk.getLeaderboards()
.then(lb => {
// С использованием всех значений по умолчанию
lb.getLeaderboardEntries("level1", { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => JSON.stringify(res));
var myJsonString = JSON.stringify(res);
myGameInstance.SendMessage('yandex', 'SetName', myJsonString);

Так можно реализовать? Помогите с синтаксисом плиз

Ну из браузера конечно, откуда еще, из космоса шоле? Получаешь от апи яндекса json, создаешь объект javascript, заполняешь данными и его сериализуешь, как еще то объяснить я не понимаю.
Синтаксис:
Используется javascript
let user = {     // объект
  name: "John",  // под ключом "name" хранится значение "John"
  age: 30        // под ключом "age" хранится значение 30
};

https://learn.javascript.ru/object

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

Re: WebGL отправка данных в Юнити

Сообщение vseinone1 17 апр 2023, 13:35

Saltant писал(а):Вот этот объект 'user' и пихаешь в json stringify и передает в юнити, там по такой же структуре объекта создаешь класс и десериализуешь.
Создаешь объект 'user' в теле ответа от яндекса и там же можешь отправлять в юнити через сендмесейдж.


Просто мы с тобой на очень разных уровнях))) Вот у тебя в примере user - который я потом пихаю в JSON.stringify(USER) верно?

А я понять не могу от яндекса по аналогии с юзером вот это RES идет верно? Т.е. яндекс уже передает готовый массив данных RES который мы можем уже перевести в Json строку и отправить. да?
Или нужно в Java создать объект с данными из этого RES и уже потом этот объект сериализовыть?
_https://play.google.com/store/apps/details?id=com.DADDYCANStudio.Motologic2d
vseinone1
UNIт
 
Сообщения: 132
Зарегистрирован: 25 ноя 2019, 12:53
  • Сайт

Re: WebGL отправка данных в Юнити

Сообщение Saltant 17 апр 2023, 16:20

vseinone1 писал(а):
Saltant писал(а):Вот этот объект 'user' и пихаешь в json stringify и передает в юнити, там по такой же структуре объекта создаешь класс и десериализуешь.
Создаешь объект 'user' в теле ответа от яндекса и там же можешь отправлять в юнити через сендмесейдж.


Просто мы с тобой на очень разных уровнях))) Вот у тебя в примере user - который я потом пихаю в JSON.stringify(USER) верно?

А я понять не могу от яндекса по аналогии с юзером вот это RES идет верно? Т.е. яндекс уже передает готовый массив данных RES который мы можем уже перевести в Json строку и отправить. да?
Или нужно в Java создать объект с данными из этого RES и уже потом этот объект сериализовыть?

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

След.

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

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

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