Вывод окна авторизации и отображение данных
Vložit
- čas přidán 13. 09. 2024
- #КурсыЯндексИгр В этом уроке научимся выводить окно авторизации игрока и отобразим в игре данные пользователя.
Версию проекта по итогам прошлого урока можно скачать здесь: disk.yandex.ru...
Чтобы открыть файл проекта в Unity, воспользуйтесь инструкцией: disk.yandex.ru...
Следующее видео «Создание окна с оценкой игры»: • Создание окна с оценко...
Удобная рабочая тетрадь по курсу: yandexgames-un...
CZcams-канал Ильи Карельцева: / @eccentricgames
Хотите быть в курсе всех главных новостей платформы? Подписывайтесь на наш канал в Telegram: t.me/yangamesd...
Вам важно быть на связи с сообществом, иметь возможность задать вопрос или помочь новичкам? Присоединяйтесь к нашему дружному комьюнити: t.me/yagamedev
#ЯндексИгры #РазработкаИгр #HTML5
Не обязательно ставить еще редакторы для javascript, можно писать всё в той же Visual Studio. В меню VS - Средства - Параметры - Текстовый редактор - Расширение файла добавить расширение jslib и выбрать редактор Javascript. Будет и подсветка и автодополнение.
не сработало
@@janitor13 в vs есть плагин для jslib
@@user-hg8io1sg5n Можно название
JSLib for Unity
@@permentohi
Спасибо, работает
Спасибо огромное, очень качественные видеоуроки, просто мастер класс для видеоуроков. Не раздражает, все понятно и четко. Еще раз огромное спасибо.
Здравствуйте. Рады, что наши уроки вам понравились и помогли в создании игры 🙂
Отлично разжевано! Спасибо
Ты такой молодец, что таких молодцов ещё поискать нужно, да и не найдёшь...
тот самый случай, когда учишь С#, а теперь тебе добавляют JS
Про авторизацию: согласно нашим Требованиям показ окна авторизации на старте запрещен. В пункте 1.2.1 перечислены случаи, когда разрешено запрашивать авторизацию: Авторизация производится только при запросе пользователя (нажатие на кнопку авторизации), желании пользователя выполнить действие, для которого авторизация необходима (покупка), или после окончания внутриигрового обучения.
а нет ли где примера, как запрашивать авторизацию по нажатию на кнопку, например?
@@demianhomeless1805 функцию AuthExtern(); повесь на кнопку при нажатии и все [DllImport("__Internal")]
private static extern void AuthExtern();
(называй как хочешь)
Потом в Jslib
AuthExtern: function () {
auth();
},
а вообще, если честно, хорошо бы Яндексу сделать плагин для юнити, где все это реализовано. Как в других сторах.
@@demianhomeless1805 это ты еще с поддержкой не общался, им вообще побоку все)
@@GGamess Добрый, там еще в пункте указано что игру можно запускать без авторизации и сохранения должны работать а куда в таком случае сохранять данные неавторизованного игрока?
Окно с предложением разрешить доступ не появляется. Может кто нибудь скинуть примеры 100% рабочих index.html и jslib?
Полезный урок! Спасибо!
Почему нет файла index для удобствак?
в конце видео (38 минута) в файле index появляются строчки (var myGameInstance = null; myGameInstance = unityInstance;) о которых ранее в видео не показывалось откуда они взялись и возможно в этом фале есть еще "новые" строчки. Можно выложить сам файл index или отдельным файлом указать все изменения которые необходимо произвести в этом файле?
Здравствуйте. Скачать версию проекта по итогам этого урока можно в описании следующего видео. Делимся ссылкой: clck.ru/359ppV
@@yagamesdev файла index.html в версии проекта нет, он же формируется в билде а потом редактируется вручную. нужен именно файл index.html т.к там появились строчки кода, о которых в видео ничего не сказано
А, да? 35:27
Спасибо
Не получается загрузить игру на Яндекс Игры, пробывал удалять строчку "myGameInstance = unityInsrtance", проект загрузился. Переменная у меня есть, в чём может быть проблема?
Привет, очень полезное видео. Подскажи, у тебя есть видео по созданию Лидербордов? Никак не могу найти
Здравствуйте. Рады, что видео нашего курса помогают вам в освоении Unity. О настройке лидерборда рассказываем в этом ролике: clck.ru/33tN9D
Сталкивался кто с проблемой SendMessage: object объект на сцене does not have receiver for function метод в скрипте, метод существует, принимает в себя строку, при этом вызов пустого метода работает правильно.
Разобрался?
Если да, поделись решением если не сложно, буду очень благодарен
@@AboobaMan юнити при билде автоматически удаляет куски кода на которые нет референсов (ни что не ссылается на метод, класс и т.д.), фикситься банально, либо прикрутить реф в коде (не всегда работает), я в свою очередь сделал костыль, повесил кнопку на пустой объект, и зарефал туда метод который использую для SendMessage.
Не совсем понял. А почему мы не можем сделать внешний метод (как сделали ранее), который возвращает строку url текстурки и имя игрока? Вместо того чтобы из js вызывать методы c#? Да и мне кажется не совсем в плане оптимизации такой способ хорош. Ведь он проходиться по всей сцене и ищет объект с этим именем
т.е. в файле .jslib написать все js функции, а не в index, по идее должно работать только надо проверить сможет ли эта функция вернуть результат)
+ Показали как это вообще делается для общего понимания полезно.
Да так можно сделать, но при возращении строк нужно доп. код написать, это в видео "Настройка локализации" показывается.
@@КтоТо-х6ь6ь Да так и сделал. Все норм работает. Конечно возвращает результат)
как только добавляю [DllImport("__Internal")]
private static extern void Hello(); или документ с расширением jslib проект билдится с ошибкой
Здравствуйте. Такой сценарий может воспроизводиться, если есть синтаксические несоответствия или названия функций не совпадают. Рекомендуем детально проверить код игры.
На модерации ругаются из-за окна авторизации. Модераторы требуют, чтобы его не было. Но я хочу реализовать авторизацию, как это сделать, чтобы пройти модерацию?
та же проблема, удалось как то решить?
@@aramharutyunyan5681 да, просто авторизацию нужно прописать отдельным экстерном методом
На уроках ты этого не увидишь, Илья не поднимает эту тему
@@channelErwave дружище я тут уже несколько часов голову над этим ломаю, прошу, можешь сказать как ты это сделал или ещё лучше скинуть код?
@@aramharutyunyan5681 Смотри
У меня один в один код как у него
Главное убери строчку вызова метода auth(); в Html
Потом сделай в скрипте, который будет вызывать авторизацию
[DllImport("__Internal")]
private static extern void AuthExtern();
(называй как хочешь)
Потом в Jslib
AuthExtern: function () {
auth();
},
Потом через скрипт вызываешь AuthExtern();
Главное вызывай его через какой то метод, а не через void Start, и всё заработает
Например у меня через кнопку этот метод вызывается, игрок сам в праве авторизоваться или нет
@@channelErwave сработало!
Спасибо большое!!!
Только вот теперь новая проблема, данные прочему то не загружаются после первого захода в игру, ну да ладно, прорвусь
Спасибо ещё раз!!!!))))
Всем привет! А что делать если на мобильном телефоны шейдеры курса не работают в юнити. Дорога не видна и персонаж тоже( как сделать так чтобы шейдер корректно отображался на телефонах?
Привет, вы нашли решение?
@@АлександрВладимирович-л9ы да, а вы?
у меня при нажатии кнопки HelloButton возникает ошибка в движке EntryPointNotFoundException: Hello, а если сделать билд и открыть в браузере, то при нажатии Button появляется окно alert, но при его закрытии игра зависает, а в консоли куча красного текста с ошибками
Михаил, здравствуйте. Такое уведомление может появляться, если билд игры ещё не реализован. Если оно возникает в готовом проекте, проверьте «my.jslib» - не пропущены ли какие-либо символы. Если всё в порядке, рекомендуем обратиться в чат Unity: t.me/yagamesunity
А можно через jslib поставить AudioListener.volume = 0f? Я просто уже не могу... Как мне выключить аудио при включении рекламы и включить обратно после закрытия окна рекламы. Вообщем не разобрался в jslib и как с помощью него взаимодействовать с С# скриптами :) Ну или хотя бы через jslib после просмотра изменить булевое значение в С# с true на false, чтобы я со своими костылями что-то доделал... А то сижу пержу пол дня, ничего не выходит.
блин всё прослушал а вот про лидерборды очень размыто ,пока мне не ясно откуда брать данные которые сравниваются
Выдает ошибку DllNotFoundException: _Internal assembly: type: member:(null)
Мне кажется, принудительная авторизация в яндексе скорее вредная вещь, чем полезная. Допустим, я хочу поиграть и у меня нет аккаунта. Буду ли я тратить время на его создание перед игрой? Скорее всего нет. И таким образом создатель игры потеряет игрока и заработок. Мне кажется, если эта авторизация не обязательна, стоит сказать об этом в начале ролика. В общем, стоит подробнее рассмотреть этот вопрос в начале, взвесить все за и против.
Здравствуйте. Реализовать в игре принудительную авторизацию не получится. Она должна производиться при запросе пользователя или при совершении действия, для которого необходима. Например, для покупки внутриигровой валюты или улучшения. Также должен быть реализован гостевой вход или возможность использования без авторизации. Пишем подробнее в пункте 1.2. Требований к играм: clck.ru/344npj
@@yagamesdev то есть, неавторизованные игроки не смогут совершать внутригровые покупки, но в целом играть без авторизации можно?
Здравствуйте. В играх должна быть реализована возможность взаимодействия в неавторизованной зоне. При этом пользователь может совершить внутриигровые покупки и без авторизации. Она необходима для пополнения баланса Янов. Поэтому рекомендуем предлагать игроку войти в аккаунт во время покупки.
Тем кто ищет... public void SetName(string name)
{
_nameText.text = name;
}
public void SetPhoto(string url)
{
StartCoroutine(DownloadImage(url));
}
IEnumerator DownloadImage(string mediaUrl)
{
UnityWebRequest request = UnityWebRequestTexture.GetTexture(mediaUrl);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
Debug.Log(request.error);
else
_photo.texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
}
Откуда у автора ролика столько кода на js в index.html у меня вообще такого нету.
У меня немного странный вопрос, есть ли в Яндекс играх ограничение на размер загружаемых изображений, я имею ввиду разрешение изображения?
Здравствуйте. Актуальные требования к изображениям и промо-материалам для игры можно посмотреть в черновике вашего проекта или в Руководстве разработчика: clck.ru/34vpzE
Здравствуйте, все сделал как у вас, экран авторизации не вылетает при загрузке игры в чем может быть дело?.. красных ошибок нету
Здравствуйте. Такой сценарий может возникать, если некорректно реализована JS логика. Поэтому рекомендуем пересмотреть код проекта.
что делать если после функции hello (12:20) я сбилдил проект, но он не запускается, иконка юнити и полоса загрузки появляются, но не загружаются((
Здравствуйте. Проект может не запускаться по следующим причинам:
1. Имеется недочёт в jslib;
2. Не установлена галочка «Decompression Fallback»;
3. Есть кириллица по пути к проекту;
4. Не настроен локальный хост. В этом случае можно загрузить билд на Яндекс Игры и посмотреть как он будет работать.
Отметим, что это не полный список возможных причин. Для детального разбора, пришлите, пожалуйста, ссылку на проект в личные сообщения t.me/YandexGamesSupport - всё проверим и подскажем.
всем привет.
вроде делаю все по видео.
при клике на тестовую кнопку вылетает такая вот ошибка.EntryPointNotFoundException: Hello assembly: type: member:(null)
Yandex.HelowBtn () (at Assets/Yandex/Plugins/Yandex.cs:14)
в 14 строчке вызов метода Hello();
все остальное вроде как по видео раза 3 перепроверил.
Здравствуйте. Функции из my.jslib можно протестировать только после билда. Рекомендуем сделать билд и загрузить его, например, в консоль разработчика. Затем нажмите ещё раз на тестовую кнопку.
@@yagamesdev спасибо.
большое спасибо
Окно авторизации должно появляться только после осознанного действия пользователя. Пункт требований 1.2.1. Если делать как в данном видео, игра не пройдет модерацию.
Здравствуйте. Постоянно уточняем правила, поэтому данные в видео могут терять актуальность. Рекомендуем сверяться с актуальным требованиями по ссылке: clck.ru/39D2dF
После осознанного действия? То есть, кнопку авторизаций надо создать в игре?
У меня в коде request.result ошибка на result VS говорит что не знает такого. Почему так?
Добрый день! Не билдит на WebGL. 10 первых билдов прошли нормально, сейчас не хочет билдить. В чем может быть проблема? Версии Юнити разные пробовал.
Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
Traceback (most recent call last):
File "C:\Program Files\Unity\Hub\Editor\2022.3.4f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\\emcc.py", line 3982, in
sys.exit(main(sys.argv))
File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\contextlib.py", line 74, in inner
File "C:\Program Files\Unity\Hub\Editor\2022.3.4f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\\emcc.py", line 3975, in main
ret = run(args)
File "C:\Program Files\Unity\Hub\Editor\2022.3.4f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\\emcc.py", line 1184, in run
phase_post_link(options, state, wasm_target, wasm_target, target) ....
Здравствуйте. Такое может происходить по ряду причин. Подскажем несколько способов, которые могут помочь с решением:
1. В игре может быть интегрировано несколько библиотек SDK. Рекомендуем удалить их все и снова собрать проект. Если дело не в этом, то можно убрать часть функций SDK и найти ту, которая не позволяет создать проект.
2. Наличие папки «Library» может мешать сборке проекта. Рекомендуем убрать её - это может решить вопрос.
3. Рекомендуем сделать новую сборку и перенести в неё файлы из прошлых проектов. При этом не нужно переносить плагины и SDK.
4. Также проект не получится собрать, если в путях к папкам или ресурсам присутствует кириллица. Чтобы этого избежать, достаточно создать билд на любом диске с английским названием. Также можно скачать версию Unity 2023, в которой кириллица не влияет на работоспособность проекта.
@@yagamesdev Спасибо за ответ! Все пункты кроме 1 перепробовал. Попробую 1
@@dronsan-unity7302 Если у тебя есть комментарий на русском в .jslib файле, то это может оказаться проблемой(как у меня). Решением было удалить их
@@artemcoleman2861спасибо за ответ! Только я забросил это дело уже давно)
На мобильном дает ошибку, на ПК нормально работает. Ошибка An error occurred running the Unity content on this pahe. TypeError: undefined is not an object
А если я, допустим, сохраняю данные через PlayerPrefs или бинарный формат, то данные сохранятся ?
Здравствуйте. Да, вы можете использовать систему «PlayerPrefs» для сохранения прогресса. Но в таком случае все данные будут удалены, если игрок решит очистить кэш браузера. Поэтому рекомендуем сохранять прогресс на свой сервер или наш с помощью методов SDK Яндекс Игр. Подробная инструкция по ссылке: clck.ru/37UFwo
У меня Атом - все прекрасно подсвечивается.
а вообще игрок обязательно должен авторизоваться или можно без этого?
Здравствуйте. Авторизация на сайте не является обязательной, поэтому в проекте должна быть реализована возможность входа и игры без неё. При этом внутренний прогресс пользователя должен сохраняться. Пишем в пункте 1.2.2. Требований, которые доступны по ссылке: clck.ru/39fAea
Может кто-то подсказать, где найти инфу о передаче данных об устройстве пользователя через jslib?
Здравствуйте. Определить устройство пользователя можно с помощью метода ysdk.deviceInfo нашего SDK. Подробнее по ссылке: clck.ru/39K356
при попытке запусить билд на сервере выдает такую вот ошибку .
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.
может кто знает как починить ?
Здравствуйте. Подобное уведомление предупреждает, что звук не может быть воспроизведён, пока пользователь не начнёт взаимодействие со страницей. Чтобы его устранить, достаточно нажать на любое место при загрузке игры.
Если воспроизведение звука является важной частью, то можно, например, добавить окно «Нажмите на страницу, чтобы продолжить».
@@yagamesdev спасибо огромное.
Я буду переделывать билд.
надеюсь все будет работать.
не получается создать фаил jslib. фаил остается форматом txt. что делать?
Здравствуйте. Создать файл .jslib можно в проекте Unity. Для этого в окне «Project» добавьте папку с названием Plugins. Внутри неё нужно создать файл в формате .jslib. Вносить в него изменения можно в любом текстовом редакторе.
У меня билд зависает на стадии Compiling Cpp for Game Assembly (Wasm), Это как то решается?
Здравствуйте. Сбора проектов для WebGL на Unity может проходить в течение 40-90 минут, время зависит от мощности процессора и версии движка. Приведем несколько возможных решений:
1. Рекомендуем перезапустить компьютер и повторить сборку.
2. Можно установить другую версию Unity.
3. Использовать приложение, которое отслеживает, что именно влияет на долгое создание проекта. После можно изменить или убрать скрипты или модули, которые мешают компиляции. Подробнее на форуме по Unity: clck.ru/34zSKG
поставь Shorter Build Time в настройках WebGl
SendMessege - где обьект , не имя класса , а имя обьекта на сцене
При попытки добавить новый архив, после пройденного 1 этапа модерации, выдает ошибку "Ошибка: permission denied" (статус модерации: подготовлен)
сделал еще один проект и в него новый архив уже добавил
Сергей, здравствуйте. Во время модерации добавить новый архив не получится. Советуем дождаться окончания проверки и после вносить изменения. Чтобы обновить игру, нужно создать черновик в проекте и отправить его на модерацию. Подробнее об этом - clck.ru/33gFXB
Как настроить index html для портретной ориентации? Help ничего не смогла найти 😭
Разобралась? По сути точно также, дальше лишь правильно сделать в юнити верстку и т.п.. В html мы просто прописали несколько уроков назад растягивать на 100%. Далее в самом яндексе указывается, какая ориентация поддерживается
@@andreyas44 Да в Unity якоря надо было нормаль но поставить, я их расширяла по объекту и из за этого не выходило ничего, а как сжала и по центру поставила всё получилось😊
А что будет, если я авторизовался на телефоне, а я игрок простой, потому что я боюсь за свой телефон и за свои данные тоже.
Здравствуйте. Использование платформы Яндекс Игр безопасно. Персональные данные каждого пользователя надёжно зашифрованы.
@@yagamesdev спасибо
Почему-то с браузером Opera коряво работает, выдаёт всякие ошибки и дальше полосы загрузки дело не идёт((((
С Хромом и Яндексом нормально
Ан, нет. Нигде не работает)))
@@akillus83ты как это пофиксли ?
@@deadxack9125 Никак. Просто избавился от окна авторизации
@@akillus83Тоесть окно авторизации необязательно в игре?
не могу протестировать получившийся результат, каждый раз выводит ошибку 404: Такой игры не существует сколько бы дней я не прождал
Здравствуйте. Чтобы игра начала открываться в каталоге, в поле «Игра переведена на...» нужно установить параметр «Да». Также выберите в консоли поддерживаемые платформы. Внесите изменения и сохраните черновик - это должно помочь.
@@yagamesdev Здравствуйте! Спасибо! всё заработало
А скрипт объекта,
в который мы посылаем сообщение должен лежать в папке Plugins? или он просто должен быть на сцене?
Здравствуйте. Добавлять скрипт объекта в папку «Plugins» необязательно. Однако с ней будет проще ориентироваться в проекте. Детальнее можно почитать по ссылке: clck.ru/364Vkn
Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js: Assets\Yandex\Plugins\my.jslib: failure to execute js library "C:\Users\pc\game\Assets\Yandex\Plugins\my.jslib":
UnityEngine.GUIUtility:ProcessEvent (int,intptr,boo как исправить?
Здравствуйте. Для решения нужно сделать следующее:
1. Убедитесь, что у вас версия Unity не ниже 2022.2.
2. Удалите папку Library с вашего проекта. Она находится по пути: Unity Hub - Show in explorer. Важно, что перед удалением нужно закрыть Unity.
3. В my.jslib вставьте этот код:
GiveMePlayerData: function () {
myGameInstance.SendMessage('Yandex', 'SetName', player.getName());
myGameInstance.SendMessage('Yandex', 'SetPhoto', player.getPhoto("medium"));
},
Также отметим, что метод авторизации нужно прописать после билда в файле index.html, а не в my.jslib.
@@yagamesdev спасибо
21:18
и ничего не прикрепил блин
Здравствуйте. Из описания к следующему ролику можно скачать версию проекта по итогам текущего урока. Найти файл можно по ссылке: clck.ru/34RnY9
Отвратительный подход к уроку. Я уже молчу, что нет никакой "песочницы" толковой, чтобы не приходилось после длительного построения билда на каждое исправление кода еще и дожидаться авто-проверки билда в Консоли самих Яндекс.Игр. Ну, зеленые еще, дорастут.
Но лектор же не может не знать про возможности монтажа видео, верно? Зачем нужно было совершать ошибку с порядком выполнения инициализации SDK, проходить весь путь с построением и загрузкой билда, потом исправлять код и снова строить? Нельзя сразу акцентировать внимание на том, как правильно делать?
ну зато конкретно так ты закрепил знание)
У меня была ошибка если писать console.Log. Помогло написание с маленькой буквы console.log
Плюс почему-то на сафари кэшируется билд игры и не применяются изменения нового билда. В хроме все ок
Здравствуйте. По вопросу запуска игры на iOS, пожалуйста, напишите нам через форму обратной связи: clck.ru/34nHbe
Ошибка в консоле при запуске проекта:
v2:1 Uncaught (in promise) Error: No parent to post message
at h.postToParent (v2:1:8644)
at HTMLDocument. (v2:1:106250)
at HTMLDocument. (v2:1:64339)
Делал всё как на видео. Я специально проверял работу на проекте, который в описании лежит, но не помогло. Игра запускается, но при нажатии на кнопку hello и подобное ничего не происходит. Беспонятия, в чем может быть проблема.
Здравствуйте. Такое уведомление связано с HTML. В этом случае рекомендуем проверить написание кода в файле index.html. Также убедитесь, что в браузере отключен блокировщик рекламы.
@@yagamesdev Спасибо!
Проблема оказалась в двух вещах:
1. Действительно из-за адблока. Отключил благодаря вашему совету - заработало.
2. Из-за того, что скрипт Yandex лежит не внутри папки Plugins, а чуть выше - в папке Yandex. При скачивании проекта с Диска по ссылке из описания он лежит неправильно, из-за этого появляется проблема.
Столкнулся со следующей проблемой:"WebSocket connection to 'ws://225.0.0.222:54997/' failed: Error in connection establishment: net::ERR_ADDRESS_INVALID". Многократно выводит эту строку. С чем может быть связано и как исправить?
это не мой api, я даже не могу понять что это
Ещё такое выдаёт:
"Uncaught (in promise) Error: No parent to post message
at g.postToParent (v2:1:8536)
at new Qr (v2:1:71766)
at new Xn (v2:1:87240)
at v2:1:89630"
игра при этом работает, но консолью пользоваться невозможно, сплошные красные ошибки
UPD: на телефоне отсутствуют звуки и прочее. Работают только эффекты монет и канвас от ворот
С вам связана эта ошибка она то появляется то исчезает: Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
emcc: error: '"C:/Program Files/Unity/Hub/Editor/2022.3.4f1/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/binaryen\bin\wasm-opt" --strip-dwarf --post-emscripten -O3 --low-memory-unused --zero-filled-memory --strip-debug --strip-producers Library/Bee/artifacts/WebGL/build/debug_WebGL_wasm/build.wasm -o Library/Bee/artifacts/WebGL/build/debug_WebGL_wasm/build.wasm --mvp-features' failed (returned 3221225477)
Попробуй выставить Shortest Build в настройках WebGl