Ребят была тут у кого-нибудь такая проблема - Яндекс не хочет сохранять и загружать данные. Всё сделано точно по инструкции и на платформе Яндекса игра запускается без ошибок. Только когда наступает момент сохранения ничего не происходит. Дальнейшие команды не выполняются (например после сохранения данных на Яндекс стоит метод перехода на новый уровень, но он уже не выполняется). При этом сама игра не фризится и продолжает работать. p.s. курс очень понравился, Илья - очень приятный лектор.
Здравствуйте. Рады, что курс вам понравился. Чтобы помочь разобраться в вопросе, потребуется больше деталей. Пожалуйста, пришлите скриншоты консоли браузера и ссылку на игру через форму обратной связи: clck.ru/34nHbe
Спасибо за труд. Единственное нормальное видео на эту тему, которое мне удалось найти. Напишите в название Лидерборд, чтобы по этому запросу могли люди искать. Я случайно нашел эту тему потому что досмотрел до конца)
Если у вас возникает ошибка с LoadExtern: У меня появлялась ошибка в браузере о том, что getData не срабатывает. Это происходит из-за того, что когда авторизованный на Яндекс играх игрок впервые заходит в игру, ему отправляется запрос на авторизацию, даже если вы не используете метод auth(). Игра все равно запрашивает доступ к фото и имени, и пока игрок не даст к ним доступ, вы не получите и его ID, который нужен для работы метода getData. А так как игра уже запущена, LoadExtern срабатывает, натыкаясь на отсутствие Id игрока для отработки getData. В видеоуроке ошибки не возникает из-за того, что урок по авторизации был ранее, и ведущий уже дал согласие на доступ к фото, имени и соответственно к ID игрока. Но если новый пользователь зайдет, то ошибка появится. Решение: Если вам не нужны фото и имя игрока, а достаточно знать Id для сохранения прогресса на сервере Яндекса, то нужно просто использовать вот такой код в index html. (в уроке по авторизации видно куда его нужно вставить) var player; YaGames .init() .then(ysdk => { console.log('Yandex SDK initialized'); window.ysdk = ysdk; initPlayer(); }); function initPlayer() { ysdk.getPlayer({ scopes: false }).then(_player => { player = _player; }).catch(err => { // Ошибка при инициализации объекта Player. }); } Прошу Яндекс обратить внимание на ошибку, ведь если оставить свою игру с ошибкой, то модерация ее не пропустит.
Спасибо, помогло! Теперь у меня другая проблема: "Uncaught (in promise) ReferenceError: myGameInstance is not defined". Помогите пж, 2 сутки исправить не могу. Upd: Нашёл решение, я забыл этот код: var myGameInstance = null; script.onload = () => { createUnityInstance(canvas, config, (progress) => {...}).then((unityInstance) => { myGameInstance = unityInstance;
Конструкция 29:00 : #if UNITY_WEBGL______ #endif в редакторе не будет работать, т.к. Unity при билде под WEBGL считает среду как WEBGL соответственно. При таких исходных можно использовать: #if !UNITY_EDITOR && UNITY_WEBGL______ #endif
Современные веб технологии... +API Яндекса без нормальной документации, +авторы контента объясняющие в стиле: вот это скопируем сюда, здесь преобразуем в строку, тут вызываем вот это и сохраняем на сервере xD. Так можно что угодно "объяснить" вообще. +Нелепая привязка к Unity - это вообще финиш.
еще советую чтобы успешно пройти модерацию такой код в html, YaGames .init() .then(ysdk => { console.log('Yandex SDK initialized'); window.ysdk = ysdk; auth(); }); var player; function auth(){ ysdk.getPlayer().then(_player => { player = _player; }).catch(err => { // Ошибка при инициализации объекта Player. }); }
В примечании к лидерборду указано что запрос можно отправлять не чаще чем раз секунду, а у игрока есть возможность нажать на кнопку покупки высоты чаще чем раз в секунду. Разве это не приведет к ошибке?
ВАЖНОЕ РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern У меня получилось сделать крайне простой костыль Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя И всё будет работать Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе Всё!
Здравствуйте. Если игрок играет первый раз и сохранения пока отсутствуют, метод getData не возвращает данные. При этом проект будет работать корректно.
Подскажите, из за чего ошибки при билде проекта? Буду благодарен за ответ, по идее никаких ошибок в коде нет, пересмотрел несколько раз. Ошибка 1: Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: failure to execute js library "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib": UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) Ошибка 2: Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: use -sVERBOSE to see more details UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) Ошибка 3: Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output: error: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: failure to execute js library "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib": error: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: use -sVERBOSE to see more details Internal compiler error in src/compiler.js! Please create a bug report at github.com/emscripten-core/emscripten/issues/ with a log of the build and the input files used to run. Exception message: "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.preprocessed.jslib:50 }; ^ SyntaxError: Unexpected token ';' at new Script (vm.js:88:7) at createScript (vm.js:263:10) at Object.runInThisContext (vm.js:311:10) at Object.load (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\modules.js:226:12) at runJSify (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\jsifier.js:95:18) at Object. (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\compiler.js:109:3) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) at Module.load (internal/modules/cjs/loader.js:986:32) at Function.Module._load (internal/modules/cjs/loader.js:879:14) emcc: error: 'D:/Unity/2023.2.14f1/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/node/node.exe D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\compiler.js C:\Users\anjut\AppData\Local\Temp\tmpforkysh5.json --symbols-only' failed (returned 1) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Здравствуйте. Уведомление «Unexpected token ';'» говорит о том, что в .jslib файле некорректный синтаксис на 50 строчке кода. Вероятно, на этой строке присутствует лишняя точка с запятой или неправильно оформленный код.
Слушай, сделай пожалуйста видео о том как вывести таблицу лидеров внутри игры. Потому что если в игре несколько уровней и на каждый из них нужна своя таблица, то кроме одной (главной) на странице игры мы увидеть не сможем.
Здравствуйте. Отображаемое название в каталоге автоматически определяется как «Лучшие игроки». Однако вы можете добавить таблицу рекордов в интерфейс игры с нужным наименованием.
У кого-нибудь была такая проблема? Я писал в точно как в видео, но проблема с сохранением игры на сервер, вылазит ошибка(TypeError ..... “getData” _LoadExtern) и игра не запускается и зависает, я даже уже копировал скрипты те что в описании оставляют под видео и html менял то что было в подсказке под видео, но не помогло. В консоли есть ошибка, что объект Progress не найден, но красным не выделяется. Сам курс понравился, но эту ошибку не смог сам исправить.
Здравствуйте. Такое уведомление отображается, если методы SDK срабатывают до завершения инициализации библиотеки. В этом случае нужно гарантировать порядок их вызовов или переписать места их использования. Подробнее пишем в Справке: clck.ru/3A4aCh
Здравствуйте! Очень полезные видео. Я работаю на движке Construct 3 и не имею знаний по какому либо языку программирования. Для Construct 3 есть готовый плагин Яндекс SDK . я его подключил , подключил рекламу , все работает ок. Возникла сложность с покупками а именно сохранение игровых данных на сервер. Очень прошу помочь в этом вопросе . как для разработчиков на Construct 3 через встроенный плагин SDK сохранять данные игрока на сервер Яндекса. Какие необходимо вызваться функции для сохранения и загрузки данных. Даже если вы подскажите самую малость это уже поможет мне двигаться быстрее с решением данного вопроса. Я не смог найти уроков по Яндекс SDK для Construct 3 .Любая помощь с Вашей стороны будет полезна .Спасибо!
Олег, здравствуйте. Для сохранения прогресса игрока можно использовать систему облачных сохранений на наш сервер. Подробную инструкцию можно найти в Справке: clck.ru/34RosY
Здравствуйте а как сделать сохранение ещё и для не авторизованных пользователей? При том что для авторизованных пользователей сохранение сделано по вашему уроку. Заранее спасибо!
Здравствуйте. Прогресс неавторизованных пользователей также можно сохранять с помощью методов player.setData/setStats и player.getData нашего SDK - они актуальны для всех игроков, вне зависимости от авторизации. Подробнее о них в справке: clck.ru/3DTSH4
@@yagamesdev Чтобы неавторизованные пользователи также видели свои рекорды (отображать их на окне следующего уровня или при поражении), например, вы можете сохранять данные в локальном хранилище браузера localStorage, либо использовать облачные сохранение данных об установленном рекорде, например, методом player.setStats для сохранения числовых значений. Вот такой ответ пришел от службы поддержки Яндекса, я понял что player.setData не подходит
@yagamesdev Вот такая ошибка вылазит после перезагрузки игры что делать не понятно Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'getData') Данные или не сохраняются или не могут взяться с яндекса
И в оставленном файле нашел такую инструкцию о которой речи не шло что она значит? Это в скрипте Progresss private void Update() { if (Input.GetKeyDown(KeyCode.Backspace)) { PlayerInfo = new PlayerInfo(); Save(); } }
Почему то функция SendMessage(которая в jslib) не видит мой объект Progress (SendMessage: object Progress not found!) имена все совпадают Может проблема в том что он переноситься между уровнями через dontDestroy?
Проблема решена ) Прикол был в том что после дублирования объекта Progress в иерархии юнити к названию была добавлена единица в скобочках и пробел перед ней Progress (1) И вот я скобки с единицей удалил а пробел остался. получилось что в иерархии название с пробелом ' Progress ' а запрос был на объект без пробела 'Progress'
Здравствуйте. При работе с методом player.setData(data, flush) действительно есть ограничения в 200 КБ. При этом вы можете также использовать внешние хосты для хранения данных игрока. Отметим, что запросы к ним по умолчанию блокируются платформой. Но вы можете добавить нужные адреса в исключения. Для этого откройте консоль, вкладка «Настройки» - «Правила для CSP». В поле «Хосты» пропишите адреса в формате cdn.example.com. Они должны быть c фиксированным доменом и защищённым протоколом https или wss. В поле «Причина использования хостов» подробно опишите, для каких целей в игре отправляются запросы к сторонним адресам. Далее нажмите «Сохранить» - коллеги рассмотрят запрос. Можно использовать внешние хосты, которые уже разрешены на платформе. Полный список в этой статье: clck.ru/3DLkLn.
В требованиях к играм есть пункт: Реализован гостевой вход или возможность использования без авторизации. Внутренний прогресс при этом должен сохраняться. Для этого playerprefs подойдёт?
Здравствуйте. Сохранять внутриигровые данные можно с помощью методов объекта Player. Метод player.setData сохраняет прогресс на сервер. Максимальный размер данных - 200 KБ. Чтобы асинхронно возвращать внутриигровой прогресс пользователя, который записан в базе Яндекса, используйте player.getData. Численные данные можно получать через метод player.setStats. Чтобы проверить, удалось ли сохранить прогресс, используйте метод Promise. Подробнее рассказываем по ссылке: clck.ru/34aKsq
Так и не понял почему часть кода пишется в jslib а часть в index html . С одной справки копируется, а на основании чего распределяется непонятно. Может ли автор как то подробнее разобрать эту связку c#____jslib____index.html. Какие зависимости и кто за что отвечает, почему так а не иначе.
В index html пишутся различные инициализирующие функции, которые выполняются при загрузке страницы и запуске игры. К ним нельзя получить доступ из скрипта C#. Лучше его не забивать лишним кодом, чтобы можно было потом и в других проектах спокойно использовать. А в jslib пишутся функции необходимые для данной конкретной игры, и только к ним можно получить доступ из скрипов на C#. И когда билд будет делаться с jslib точно ничего не произойдёт.
38:07 в функции записи в лидерборд можно было одну строку написать lb.setLeaderboardScore('Height', value); Переменная lb уже была получена в глобальной области index html 34:18
Я сейчас на пути к изучению и вот какое на данный момент понимание: Если ты пишешь код, который не связан с джаваскриптом, а только с сишарпом, тогда пиши в сишарп скриптах. Если ты пишешь код, который не связан с сишарпом, а только с джаваскриптом, тогда пиши в индекс html Если ты пишешь код, где тебе нужно из сишарпа вызвать функцию джаваскрипт или из функции джаваскрипт получить какие-то данные из сишарп скриптов, тогда используй jslib, как прослойку для передачи этих данных. В jslib мы пишем функции на языке джаваскрипт, которые мы можем вызвать из сишарпа. В индекс html тоже есть функции на языке джаваскрипт, но их мы не можем вызвать из сишарпа, поэтому нам нужен jslib Знающие люди поправьте меня, если ошибаюсь
При первом обновлении страницы с игрой сохранения регистрируются и выводятся. Но уже при втором обновлении данные сбрасываются к дефолтным. С чем это может быть связано?
Здравствуйте. Вероятно, во время второго обновления страницы Unity перезаписывает данные на стандартные и сохраняет их на сервер. Необходимо внимательно проверить логику сохранений.
Это конечно все хорошо, но как мне создать второй лидерборд и его увидеть вообще?Надо ли снова инициализировать другую переменную lb?Или там можно в одной все сделать
Здравствуйте. Вы можете создать несколько таблиц рекордов внутри игры. При этом основной лидерборд, который отображается в описании проекта в каталоге, может быть только один. Если вы создаете и делаете основным новый лидерборд, в предыдущем опция автоматически отключится. Подробнее в Справке: clck.ru/37MrX4
Здравствуйте. Такое уведомление появляется, так как вызов «getData» происходит до того, как «Player» успевает инициализироваться. Необходимо гарантировать порядок вызовов. Подробнее по ссылке: clck.ru/35BEfW
Здравствуйте. Да, вы можете использовать «Dictionary» в проекте. Дело в том, что в видеоуроках из курса мы реализовываем сохранение данных на сервер Яндекс Игр с помощью JSON. А он, в свою очередь, не поддерживает «Dictionary».
Здравствуйте, отличный курс, но я столкнулся с такой проблемой, мне нужно для кликера чтобы Яндекс запоминал купленные спрайты, для этого я сделал list со значениями, то есть если куплен спрайт то 1, если нет то 0, и вот эти значения у меня проверяются в магазине, но когда я пытаюсь работать с PlayerInfo в других скриптах, когда загружаю на яндекс и начинаю тестировать, в консоли выдаёт ошибку Index was out of range, я пытался эту проблему решить через костыли, то есть я сделал такой же массив только уже не в отдельном PlayerInfo а как он был изначально, когда работаю с ним то всё в порядке, я даже могу этому массиву передавать значения из PlayerInfo, но остаётся лишь проблема как запихать данные обратно в PlayerInfo, потому что я пробовал и через оператор FOR но в таком случае оно почему то вообще не работает, так что мне нужно какое то готовое решение как данные массива выгружать и загружать
Что делать если при нажатии на кнопку для перехода в следующий уровень он не переходит, в Unity пишет _Internal assembly: type: member:(null), а когда тестирую в яндексе следующий уровень не включается, если выйти в главное меню игры и нажать играть запускается нужный уровень, при перезагрузке страницы ничего не сохраняется
Здравствуйте. Такое может происходить по многим причинам. Делимся возможными вариантами решений: 1. Проверьте настройки кнопки перехода. Она должна вызывать нужную функцию или метод для загрузки следующего уровня. Убедитесь, что этапы в вашей игре доступны для загрузки. 2. Просмотрите код, отвечающий за переход на следующий уровень. В нём должны использоваться корректные методы или функции для загрузки этапа, например, SceneManager.LoadScene(). 3. Проверьте консоль Unity на наличие уведомлений или предупреждений. Они могут указывать на причину, по которой не осуществляется переход на следующий уровень.
Можете объяснить такой момент. Что будет, если я запрошу сохранение игрока с сервера Яндекса, если он первый раз запустит игру?(сохранений там, очевидно, никаких нет)
@@БогданЖиленко-ж6с Я разобралься со всем этим Если возникают проблемы с загрузкой данных, например всё идёт к нулю, то удалите DontDestroyOnLoad(gameobject) из скрипта, он у меня был виноват что данные не сохранялись если выдаёт очень странную ошибку которая состоит из непонятных символов значит что проблема в C# коде, лично у меня GetData() которая берёт имя и фото игрока запускалась в Awake() и из за этого выдавало ошибку, я сделал эту функцию через булеаны(если надо скину код) и нормально работает Дальше, старайтесь вызывать LoadExtern ранзше всех функций особенно SaveExtern, у меня было такое что я случайно вызывал SaveExtern до LoadExtern и данные при заходе на уровень менялись на 0, абаслютно все, я 2 дня над этим голову ломал
ах да, совсем забыл ребят Вопрос что будет если первый раз запустить игру и загрузить данные, то в моём случае нечего не происходило, всё нормально работает и нормально сохраняются и загружаются данные после всего этого
У меня ошибка cs0106 на public, private. Я вообще не понимаю, как всё это можно можно понять. Дофига кодов надо писать, это всё ещё и запомнить, как то. Я игру сделал, но в этом моменте, я просто потерян, как и моё желание быть разработчиком. Это очень сложно
Бро, всё познается со временем. Попробуй получше освоиться сначала с самим языком C#, попробовать более простые программы, рано или поздно всё получится. Просто нужно очень много времени
Здравствуйте. Такое уведомление появляется, так как вызов «getData» происходит до того, как «Player» успевает инициализироваться. Необходимо гарантировать порядок вызовов. Подробнее по ссылке: clck.ru/35BEfW
@@yagamesdev да вы всем отвечаете так, кидаете что вы, что тех поддержка ссылку на эту страницу. Но мы делали по ней - это не работает. Не гарантирует ничего. Просто покажите как эту инструкцию применить к вашему проекту. Какой код и куда вставить. А то делаем по инструкции что вы скинули а все равно ошибка, только уже новые.
ВАЖНОЕ РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern У меня получилось сделать крайне простой костыль Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя И всё будет работать Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе Всё!
Здравствуйте. Да, «JSON» позволяет хранить любые типы данных, в том числе целые классы и массивы. В этом случае нужно использовать сереализацию и десериализацию. Подробнее можно почитать по ссылке: clck.ru/34gqqd
Добрый день. Подобное уведомление преобладает в Android билдах Unity, в Web встречается редко. Необходимо проверить правильность реализации SDK логики проекта. Если это не поможет, рекомендуем удалить папку «Library» и создать чистый билд - «Clean build»
Здравствуйте. Такое уведомление может возникать, если «SendMessage» не был объявлен и остаётся пустым, но при этом происходит попытка считать его данные.
Делал всё как сказаноЮ думал что это легкотня, а в итоге при сборке игры получаю в консоли одну ошибку, ссылающуюся на: ================================ { wr.requestInstances[request].timeout = timeout; } function _LoadExtern() { player.getData().then(_date => { ^ ================================ Ломаю голову уже 3 дня, решить никак не могу...
Здравствуйте. В таком случае нужно создать искусственную задержку до того момента, пока не загрузятся необходимые данные. В Unity, например, это можно сделать с использованием корутин. Подробнее по ссылке: clck.ru/39ZV92
У меня не работает LoadExtern но тоесть он должен вызывать SetPlayerInfo но он не вызывается я всё перепроверил правильно при этом в яндекс ошибок не выдает я не знаю как исправить
Здравствуйте. Рекомендуем проверить реализацию кода согласно видео. Если не получится восстановить работу LoadExtern, можно воспользоваться плагином «PluginYG». Он поможет исключить возможные сценарии при работе с SDK. Документация плагина доступна по ссылке: clck.ru/3Bk46k.
@@yagamesdev я уже исправил но выдаёт ошибку другую 351450 typeError cannot read properties of null (reading Send Message) at_gimeplayer. Хотя все хорошо все как по учебнику и я не знаю почему это
TypeError: Cannot read properties of undefined (reading 'getData') Первый запуск прошёл после исправления index по советам комментаторов. Второй запуск выдаёт ошибку(выше), проверял на пк и телефоне. У автора нет такой ошибки хотя он тоже хранит инты, почему у меня ругается на тип данных. Кто сталкивался?
Здравствуйте. Такое уведомление может отображаться, когда методы SDK, например, GetData, срабатывают до инициализации библиотеки или объекта Player. Необходимо гарантировать порядок вызовов - прописать условие для каждого объекта. Например, если SDK инициализирован, запрашивается инициализация Player. Если Player инициализирован, срабатывает вызов методов работы с данными игрока. Подробнее в Руководстве разработчика: clck.ru/35BEfW
Здравствуйте. Вы можете проверить на старте игры или перед вызовом окна авторизации, совершил ли пользователь вход в аккаунт. Для этого используется метод Player - player.getMode(). Он возвращает строку lite в случае, если игрок не авторизован в Яндексе. Подробнее в Руководстве разработчика: clck.ru/35HuSQ
Здравствуйте. Уведомление «is not defined» может отображаться, если методы SDK срабатывают до завершения инициализации библиотеки. В этом случае нужно гарантировать порядок их вызовов. Подробнее в Руководстве разработчика: clck.ru/3EDjeF.
Кто-нибудь может в итоге скинуть полный html код, чтобы и аватарка и имя игрока выводилось, и чтобы сохранения были. А то ошибки вылазиют. Уже несколько дней застрял тут.
@@yagamesdev Не работает. Возникает ошибка с LoadExtern. Я поменял на тот код, который вы рекомендуете в описании и все равно не работает. Я вызывал этот LoadExtern из Start, потом из Awake, из других методов. Все равно не работает. Я вывел ради теста сохраняемые переменные на экран, они не изменяются вообще. С PlayePrefs проблем вообще никаких.
Та же проблема что и у людей ниже, если нету сохранений или разрешений изначально то дальше загрузки не пускает, ругается "player is not defined at _LoadExtern"
Здравствуйте. Чтобы решить этот вопрос, необходимо инициализировать объект Player на старте игры. Он позволяет проверить авторизацию игрока и наличие его сохранений на сервере. Инструкция в Справке: clck.ru/3559yV
@@yagamesdev Никак потому что когда заходит новый игрок то Яндекс каким то образом инициализирует игрока только после того как он нажмет кнопку играть, а до этого всегда идут функции Awake и Start в которых LoadExtern вызывается и происходит ошибка, хз как исправить
Здравствуйте. Уведомление «UTF8toString is not defined» может появляться, если установлена другая версия Unity. Рекомендуем создавать проект по нашему курсу в версии 2022.1.12f1, либо изменить в коде UTF8ToString() на pointer_stringify().
Здраствуйте когда я пытаюсь тип PlayerInfo преобразовать в строку у меня ошибку выдает у меня в PlayherInfo помимо даных int есть float и list такде по мимо public есть и public static а все спасибо нашел ошибку а так хороший гайд
Добрый день. Если проект добавлен в каталог через архив в консоли разработчика, то сохранять дату и время не получится. Получать время входа пользователя в игру можно с сервера, на который она загружена.
@@sh_games8780 Здравствуйте, спасибо за ответ. Проверил, но проблема не в этом. Жалко что без сохранений яндекс отказывается принимать игры. А то у меня вся игра готово полностью только с сохранением данных ступор полный.
@@nekto2436 тогда ещё как вариант - нужно проверить название методов в Jslib и c#, может где-то опечаталась и они отличаются. И в файле Jslib проверить, правильно ли прописали обращение в myGameInstance
Здравствуйте. Такое уведомление может возникать, если в my.jslib была допущена неточность. Отметим, что под видео можно скачать уже готовый my.jslib и сравнить с вашим, чтобы выявить недочёт. Дополнительно рекомендуем убедиться, что версия Unity не младше 2022 года и проверить, чтобы в коде с C# не было уведомлений с «[DllImport("__Internal")]». Если рекомендации не принесут желаемого результата, пришлите нам подробности в личные сообщения в Telegram: t.me/YandexGamesSupport. Всё проверим и подскажем.
Добрый день. Можно использовать PlayerPrefs.SetInt("CurrentLevel", Номер уровня) для сохранения. После этого при запуске игры брать переменную и загружать нужный уровень. Подробнее в Документации по ссылке: clck.ru/3Aqphx.
Не могу понять как добавлять инфу в "не главные" лидерборды и как её загружать с сервера, не могу понять толи у меня топ пустой и не заполняется, толи он не считывается
@@YandexADV фсмысли? Проблема в чём: есть 2 борды, по максимальному уровню и по кол-ву ходов на каком-то уровне, я закидывал всё как надо и вторая борда не обновлялась. Проблема была в том была, что у ЯИ задержка между запросами секунду и второй запрос просто не обрабатывался
Здравствуйте. Чтобы сохранять и возвращать прогресс игрока в новых сессиях, необходимо запрашивать через SDK данные пользователя на запуске игры. Сделать это можно с помощью метода player.getData(keys). Подробнее в Руководстве разработчика: clck.ru/35HCop
Здравствуйте. Рекомендуем вместо awake вызывать метод loadextern в методе start. Также необходимо убедиться, что методы вызываются в правильной последовательности и в первую очередь срабатывает инициализация.
Здравствуйте. Сохранение прогресса через библиотеку SDK Яндекс Игр актуально для любой версии Unity. Документацию с методами сохранения данных можно посмотреть в Руководстве разработчика: clck.ru/34RosY
Здравствуйте! А если делать игру не под яндекс игры, а все то же будет отправляться на собственный сервер и получать информацию по ссылке, Всё работает аналогично или что то нужно поменять?
Добрый день. Для сохранения данных и прогресса игрока используются методы SDK Яндекс Игр. Поэтому информация в видеоролике применима только для проектов, которые публикуются на нашей платформе.
Здравствуйте. Давайте всё детально проверим. Если загрузить архив в консоль разработчика не удалось, напишите нам, пожалуйста, через форму обратной связи по ссылке: clck.ru/34nHbe
@@vitaliySobakinson знаю что тоже позднее на 4 месяца ответил и это как закономерность уже, но человек выше спрашивал не про "префабы", а про "префсы". Префсы - это PlayerPrefs(почти то же самое, что мы делали с помощью PlayerInfo). Так вот, в префсы обычно сохраняют настройки музыки, чувствительности мыши и т.д., вот человек и спросил за это.
Видео бесполезное, потому что вылезает такая ошибка Cannot read properties of undefined (reading 'getData'). Автор видео так и не ответил как решить проблему.
Здравствуйте. Такое уведомление появляется, если методы работы с данными игрока вызываются до инициализации SDK или объекта Player. Необходимо гарантировать порядок вызовов, например, через условие then. Инструкция в Руководстве разработчика: clck.ru/3958u8
@@coyotewld Ну стоит не писать хуйню. И понять что человек в видео договорил все не до конца. Хотя бы упомянуть что код который видео не будет работать на всех версиях юнити а только на 2022
Здравствуйте. Такое уведомление появляется из-за пустой строки или массива. Для решения можно использовать «Try Catch». Подробнее по ссылке: clck.ru/38QaJV
Здравствуйте. Обычно такое уведомление возникает, если в файле JSON присутствует синтаксическое несоответствие. Например, если пропущены или добавлены лишние знаки. Рекомендуем внимательно просмотреть сохранение в файле JSON и дополнительно проверить, что формат кода соответствует описанному в видео. Отметим, что рассмотреть корректность знаков также можно с помощью JSON Linter или JSON Validator.
Ребятки, у кого возникает Syntax error, ну или ещё какие-то ошибки, пропишите при создании публичного поля класса PLayerInfo вотэто: public PLayerInfo PlayerInfo = new PlayerInfo();
public void SetPlayerInfo(string value) { PlayerInfo = JsonUtility.FromJson(value); _playerInfoText.text = PlayerInfo.Level; } Такой код, думаю все реализовал как в его коде ,нужно только сохранение прогресса, но выдает ошибку Ошибка CS0029 Не удается неявно преобразовать тип "int" в "string". в его коде такого не было, просто преобразавать или я что-то пропустил?
Здравствуйте. При вызове метода передавать данные в int нужно в формате string. Конвертировать данные можно, если изменить последнюю строку на следующее: _playerInfoText.text = PlayerInfo.Level.ToString(); Либо можно добавить отдельные строки: int a = 0; SetPlayerInfo(a.ToString())
как решить ошибку в unity: Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output: error: undefined symbol: FullAdShow (referenced by top-level compiled C/C++ code) warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0` warning: _FullAdShow may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: GetLeaderboardScores (referenced by top-level compiled C/C++ code) warning: _GetLeaderboardScores may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: InitGame_js (referenced by top-level compiled C/C++ code) warning: _InitGame_js may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: InitLeaderboard (referenced by top-level compiled C/C++ code) warning: _InitLeaderboard may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: LoadExtern (referenced by top-level compiled C/C++ code) warning: _LoadExtern may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: OpenURL (referenced by top-level compiled C/C++ code) warning: _OpenURL may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library error: undefined symbol: PromptShowInternal (referenced by top-level compiled C/C++ code)
Здравствуйте. Для решения вопроса рекомендуем: 1. Удалить папку Library в проекте. 2. Проверить, чтобы плагины соответствовали используемой версии Unity. Отметим, что на движке версии 2020 не работают плагины 2021+ и наоборот. В курсе используется Unity 2022.
Здравствуйте. Такое уведомление может появляться, если до вызова метода сохранения и получения данных игрока не совершается инициализация объекта Player. Инструкцию по её настройке можно найти в Руководстве разработчика: clck.ru/34yKrr Также рекомендуем проверить, что черновик запускается в режиме ракеты. Режим черепахи нужен для тестирования игры и эмуляции ошибок, поэтому некоторые методы в нём могут работать некорректно. Если такое происходит только в режиме черепахи - это не должно повлиять на результаты модерации. Подробнее рассказываем по ссылке: clck.ru/34yKvJ
@@yagamesdev Здравствуйте, Я совершил инициализацию объекта Player, но нечего не поменялось. Также вылезает ошибка Cannot read properties of undefined (reading "getData") Хотя с телефона и с другова компьютера все работает и данные сохраняются. Я отправил игру на модерацию, и мне отклонили игру по поводу того, что В авторизованной зоне отображается ошибка при первом запуске игры
ВАЖНОЕ РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern У меня получилось сделать крайне простой костыль Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя И всё будет работать Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе Всё!
Ребят была тут у кого-нибудь такая проблема - Яндекс не хочет сохранять и загружать данные. Всё сделано точно по инструкции и на платформе Яндекса игра запускается без ошибок. Только когда наступает момент сохранения ничего не происходит. Дальнейшие команды не выполняются (например после сохранения данных на Яндекс стоит метод перехода на новый уровень, но он уже не выполняется). При этом сама игра не фризится и продолжает работать.
p.s. курс очень понравился, Илья - очень приятный лектор.
Здравствуйте. Рады, что курс вам понравился. Чтобы помочь разобраться в вопросе, потребуется больше деталей. Пожалуйста, пришлите скриншоты консоли браузера и ссылку на игру через форму обратной связи: clck.ru/34nHbe
Спасибо за труд. Единственное нормальное видео на эту тему, которое мне удалось найти. Напишите в название Лидерборд, чтобы по этому запросу могли люди искать. Я случайно нашел эту тему потому что досмотрел до конца)
Если у вас возникает ошибка с LoadExtern:
У меня появлялась ошибка в браузере о том, что getData не срабатывает. Это происходит из-за того, что когда авторизованный на Яндекс играх игрок впервые заходит в игру, ему отправляется запрос на авторизацию, даже если вы не используете метод auth(). Игра все равно запрашивает доступ к фото и имени, и пока игрок не даст к ним доступ, вы не получите и его ID, который нужен для работы метода getData. А так как игра уже запущена, LoadExtern срабатывает, натыкаясь на отсутствие Id игрока для отработки getData.
В видеоуроке ошибки не возникает из-за того, что урок по авторизации был ранее, и ведущий уже дал согласие на доступ к фото, имени и соответственно к ID игрока. Но если новый пользователь зайдет, то ошибка появится.
Решение:
Если вам не нужны фото и имя игрока, а достаточно знать Id для сохранения прогресса на сервере Яндекса, то нужно просто использовать вот такой код в index html. (в уроке по авторизации видно куда его нужно вставить)
var player;
YaGames
.init()
.then(ysdk => {
console.log('Yandex SDK initialized');
window.ysdk = ysdk;
initPlayer();
});
function initPlayer() {
ysdk.getPlayer({ scopes: false }).then(_player => {
player = _player;
}).catch(err => {
// Ошибка при инициализации объекта Player.
});
}
Прошу Яндекс обратить внимание на ошибку, ведь если оставить свою игру с ошибкой, то модерация ее не пропустит.
блин спасибо. я второй день уже мучаюсь
коммент написан 2 месяца назад, а всё ещё полезен. Спасибо❤
Спасибо, помогло! Теперь у меня другая проблема: "Uncaught (in promise) ReferenceError: myGameInstance is not defined". Помогите пж, 2 сутки исправить не могу.
Upd: Нашёл решение, я забыл этот код:
var myGameInstance = null;
script.onload = () => {
createUnityInstance(canvas, config, (progress) => {...}).then((unityInstance) => {
myGameInstance = unityInstance;
спасибо
бро, а куда этот скрипт писать?
Конструкция 29:00 :
#if UNITY_WEBGL______ #endif
в редакторе не будет работать, т.к. Unity при билде под WEBGL считает среду как WEBGL соответственно.
При таких исходных можно использовать:
#if !UNITY_EDITOR && UNITY_WEBGL______ #endif
Так он же вроде и сделал это для того, чтобы в редакторе не выполнялась и не вызывала ошибок, или я ошибаюсь?
Спасибо, ответ который я искал!
я: смотрю 42 минутный курс что бы понять, КАК ПРОСТО СОХРАНИТЬ ПЕРЕМЕННУЮ
жиза
bruh
Современные веб технологии... +API Яндекса без нормальной документации, +авторы контента объясняющие в стиле: вот это скопируем сюда, здесь преобразуем в строку, тут вызываем вот это и сохраняем на сервере xD. Так можно что угодно "объяснить" вообще. +Нелепая привязка к Unity - это вообще финиш.
@@MariaEsenina всё так
date и data - разные слова, если что)
у всех у кого ошибка c getdata ,loadextern, советую вызвать метод loadextern в методе start а не awake как показано в видео , по идее ошибок не будет
еще советую чтобы успешно пройти модерацию такой код в html,
YaGames
.init()
.then(ysdk => {
console.log('Yandex SDK initialized');
window.ysdk = ysdk;
auth();
});
var player;
function auth(){
ysdk.getPlayer().then(_player => {
player = _player;
}).catch(err => {
// Ошибка при инициализации объекта Player.
});
}
В примечании к лидерборду указано что запрос можно отправлять не чаще чем раз секунду, а у игрока есть возможность нажать на кнопку покупки высоты чаще чем раз в секунду. Разве это не приведет к ошибке?
Кто знает как решить ошибку "player is not defined at Load Extem"?
ВАЖНОЕ
РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern
У меня получилось сделать крайне простой костыль
Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока
После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя
И всё будет работать
Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе
Всё!
если игрок первый раз играет у него нет сохранений, то что тогда возвращает getData?
Просто вернет значение 0.
@@MDVonlineStore как я понял там просто возвращает пустой объект {}
Здравствуйте. Если игрок играет первый раз и сохранения пока отсутствуют, метод getData не возвращает данные. При этом проект будет работать корректно.
Архитектура проекта адовая конечно))
Подскажите, из за чего ошибки при билде проекта? Буду благодарен за ответ, по идее никаких ошибок в коде нет, пересмотрел несколько раз.
Ошибка 1:
Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: failure to execute js library "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib":
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Ошибка 2:
Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: use -sVERBOSE to see more details
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Ошибка 3:
Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
error: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: failure to execute js library "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib":
error: D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.jslib: use -sVERBOSE to see more details
Internal compiler error in src/compiler.js!
Please create a bug report at github.com/emscripten-core/emscripten/issues/
with a log of the build and the input files used to run. Exception message: "D:\Unitygames\GeometryParkour\Geometry Parkour\Assets\Yandex\Plugins\my.preprocessed.jslib:50
};
^
SyntaxError: Unexpected token ';'
at new Script (vm.js:88:7)
at createScript (vm.js:263:10)
at Object.runInThisContext (vm.js:311:10)
at Object.load (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\modules.js:226:12)
at runJSify (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\jsifier.js:95:18)
at Object. (D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\compiler.js:109:3)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
emcc: error: 'D:/Unity/2023.2.14f1/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/node/node.exe D:\Unity\2023.2.14f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\src\compiler.js C:\Users\anjut\AppData\Local\Temp\tmpforkysh5.json --symbols-only' failed (returned 1)
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Здравствуйте. Уведомление «Unexpected token ';'» говорит о том, что в .jslib файле некорректный синтаксис на 50 строчке кода. Вероятно, на этой строке присутствует лишняя точка с запятой или неправильно оформленный код.
Слушай, сделай пожалуйста видео о том как вывести таблицу лидеров внутри игры. Потому что если в игре несколько уровней и на каждый из них нужна своя таблица, то кроме одной (главной) на странице игры мы увидеть не сможем.
Где будет показано то, что мы вписали в графу "отображаемое название лидерборда" ?
Здравствуйте. Отображаемое название в каталоге автоматически определяется как «Лучшие игроки». Однако вы можете добавить таблицу рекордов в интерфейс игры с нужным наименованием.
У кого-нибудь была такая проблема? Я писал в точно как в видео, но проблема с сохранением игры на сервер, вылазит ошибка(TypeError ..... “getData” _LoadExtern) и игра не запускается и зависает, я даже уже копировал скрипты те что в описании оставляют под видео и html менял то что было в подсказке под видео, но не помогло. В консоли есть ошибка, что объект Progress не найден, но красным не выделяется. Сам курс понравился, но эту ошибку не смог сам исправить.
Здравствуйте. Такое уведомление отображается, если методы SDK срабатывают до завершения инициализации библиотеки. В этом случае нужно гарантировать порядок их вызовов или переписать места их использования. Подробнее пишем в Справке: clck.ru/3A4aCh
Здравствуйте! Очень полезные видео. Я работаю на движке Construct 3 и не имею знаний по какому либо языку программирования. Для Construct 3 есть готовый плагин Яндекс SDK . я его подключил , подключил рекламу , все работает ок. Возникла сложность с покупками а именно сохранение игровых данных на сервер. Очень прошу помочь в этом вопросе . как для разработчиков на Construct 3 через встроенный плагин SDK сохранять данные игрока на сервер Яндекса. Какие необходимо вызваться функции для сохранения и загрузки данных. Даже если вы подскажите самую малость это уже поможет мне двигаться быстрее с решением данного вопроса. Я не смог найти уроков по Яндекс SDK для Construct 3 .Любая помощь с Вашей стороны будет полезна .Спасибо!
Олег привет, получилось разобраться? Сможешь подсказать пожалуйста
@@НикитаСтрельников-м1с привет, пока что оставил этот вопрос , работаю только с рекламой без покупок.
Олег, здравствуйте. Для сохранения прогресса игрока можно использовать систему облачных сохранений на наш сервер. Подробную инструкцию можно найти в Справке: clck.ru/34RosY
в информации "Версию проекта по итогам прошлого урока можно скачать здесь" нету кода с этого урока.
Здравствуйте. Готовый код по результатам текущего урока можно найти в описании следующего видео по ссылке: clck.ru/34vRQp
Здравствуйте а как сделать сохранение ещё и для не авторизованных пользователей? При том что для авторизованных пользователей сохранение сделано по вашему уроку. Заранее спасибо!
Здравствуйте. Прогресс неавторизованных пользователей также можно сохранять с помощью методов player.setData/setStats и player.getData нашего SDK - они актуальны для всех игроков, вне зависимости от авторизации. Подробнее о них в справке: clck.ru/3DTSH4
@@yagamesdev Чтобы неавторизованные пользователи также видели свои рекорды (отображать их на окне следующего уровня или при поражении), например, вы можете сохранять данные в локальном хранилище браузера localStorage, либо использовать облачные сохранение данных об установленном рекорде, например, методом player.setStats для сохранения числовых значений.
Вот такой ответ пришел от службы поддержки Яндекса, я понял что player.setData не подходит
@yagamesdev Вот такая ошибка вылазит после перезагрузки игры что делать не понятно
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'getData')
Данные или не сохраняются или не могут взяться с яндекса
И в оставленном файле нашел такую инструкцию о которой речи не шло что она значит?
Это в скрипте Progresss
private void Update()
{
if (Input.GetKeyDown(KeyCode.Backspace))
{
PlayerInfo = new PlayerInfo();
Save();
}
}
В режиме инкогнито ошибок нет, но и сохранения нету
Почему то функция SendMessage(которая в jslib) не видит мой объект Progress (SendMessage: object Progress not found!)
имена все совпадают Может проблема в том что он переноситься между уровнями через dontDestroy?
Проблема решена ) Прикол был в том что после дублирования объекта Progress в иерархии юнити к названию была добавлена единица в скобочках и пробел перед ней Progress (1) И вот я скобки с единицей удалил а пробел остался. получилось что в иерархии название с пробелом ' Progress ' а запрос был на объект без пробела 'Progress'
Там подписано до 200кб. Есть ли возможность как-то сохранять данные чуть больше (около 10мб на человека) или нужно подключать свой сервер?
Здравствуйте. При работе с методом player.setData(data, flush) действительно есть ограничения в 200 КБ. При этом вы можете также использовать внешние хосты для хранения данных игрока. Отметим, что запросы к ним по умолчанию блокируются платформой. Но вы можете добавить нужные адреса в исключения. Для этого откройте консоль, вкладка «Настройки» - «Правила для CSP». В поле «Хосты» пропишите адреса в формате cdn.example.com. Они должны быть c фиксированным доменом и защищённым протоколом https или wss.
В поле «Причина использования хостов» подробно опишите, для каких целей в игре отправляются запросы к сторонним адресам. Далее нажмите «Сохранить» - коллеги рассмотрят запрос. Можно использовать внешние хосты, которые уже разрешены на платформе. Полный список в этой статье: clck.ru/3DLkLn.
Подскажите, в каком, уроке вы создавали скрипт progress?
Здравствуйте. Скрипт «Progress» был создан в видео по ссылке: clck.ru/36mRcc
@@yagamesdev спасибо
Почему мне нужно подтверждать свои действия в яндекс играх,пишет чтото с jslib
В требованиях к играм есть пункт: Реализован гостевой вход или возможность использования без авторизации. Внутренний прогресс при этом должен сохраняться. Для этого playerprefs подойдёт?
Здравствуйте. Сохранять внутриигровые данные можно с помощью методов объекта Player. Метод player.setData сохраняет прогресс на сервер. Максимальный размер данных - 200 KБ. Чтобы асинхронно возвращать внутриигровой прогресс пользователя, который записан в базе Яндекса, используйте player.getData. Численные данные можно получать через метод player.setStats. Чтобы проверить, удалось ли сохранить прогресс, используйте метод Promise. Подробнее рассказываем по ссылке: clck.ru/34aKsq
@@yagamesdev200 КБ на одного игрока?
Так и не понял почему часть кода пишется в jslib а часть в index html . С одной справки копируется, а на основании чего распределяется непонятно. Может ли автор как то подробнее разобрать эту связку c#____jslib____index.html. Какие зависимости и кто за что отвечает, почему так а не иначе.
В index html пишутся различные инициализирующие функции, которые выполняются при загрузке страницы и запуске игры. К ним нельзя получить доступ из скрипта C#. Лучше его не забивать лишним кодом, чтобы можно было потом и в других проектах спокойно использовать. А в jslib пишутся функции необходимые для данной конкретной игры, и только к ним можно получить доступ из скрипов на C#. И когда билд будет делаться с jslib точно ничего не произойдёт.
38:07 в функции записи в лидерборд можно было одну строку написать lb.setLeaderboardScore('Height', value); Переменная lb уже была получена в глобальной области index html 34:18
Я сейчас на пути к изучению и вот какое на данный момент понимание:
Если ты пишешь код, который не связан с джаваскриптом, а только с сишарпом, тогда пиши в сишарп скриптах.
Если ты пишешь код, который не связан с сишарпом, а только с джаваскриптом, тогда пиши в индекс html
Если ты пишешь код, где тебе нужно из сишарпа вызвать функцию джаваскрипт или из функции джаваскрипт получить какие-то данные из сишарп скриптов, тогда используй jslib, как прослойку для передачи этих данных. В jslib мы пишем функции на языке джаваскрипт, которые мы можем вызвать из сишарпа. В индекс html тоже есть функции на языке джаваскрипт, но их мы не можем вызвать из сишарпа, поэтому нам нужен jslib
Знающие люди поправьте меня, если ошибаюсь
При первом обновлении страницы с игрой сохранения регистрируются и выводятся. Но уже при втором обновлении данные сбрасываются к дефолтным. С чем это может быть связано?
Здравствуйте. Вероятно, во время второго обновления страницы Unity перезаписывает данные на стандартные и сохраняет их на сервер. Необходимо внимательно проверить логику сохранений.
Это конечно все хорошо, но как мне создать второй лидерборд и его увидеть вообще?Надо ли снова инициализировать другую переменную lb?Или там можно в одной все сделать
Здравствуйте. Вы можете создать несколько таблиц рекордов внутри игры. При этом основной лидерборд, который отображается в описании проекта в каталоге, может быть только один.
Если вы создаете и делаете основным новый лидерборд, в предыдущем опция автоматически отключится. Подробнее в Справке: clck.ru/37MrX4
Из-за чего может возникать ошибка: TypeError: Cannot read properties of undefined (reading 'getData') at_LoadExtern ?
Здравствуйте. Такое уведомление появляется, так как вызов «getData» происходит до того, как «Player» успевает инициализироваться. Необходимо гарантировать порядок вызовов. Подробнее по ссылке: clck.ru/35BEfW
Можно ли в PlayerInfo 9:27 добавить Dictionary, чтобы потом его сохранить на сервере яндекса, или только простые типы данных?
Здравствуйте. Да, вы можете использовать «Dictionary» в проекте. Дело в том, что в видеоуроках из курса мы реализовываем сохранение данных на сервер Яндекс Игр с помощью JSON. А он, в свою очередь, не поддерживает «Dictionary».
@@yagamesdev а как сохранять объект Image например? Не понятно, или это только в кеш браузера?
Здравствуйте, отличный курс, но я столкнулся с такой проблемой, мне нужно для кликера чтобы Яндекс запоминал купленные спрайты, для этого я сделал list со значениями, то есть если куплен спрайт то 1, если нет то 0, и вот эти значения у меня проверяются в магазине, но когда я пытаюсь работать с PlayerInfo в других скриптах, когда загружаю на яндекс и начинаю тестировать, в консоли выдаёт ошибку Index was out of range, я пытался эту проблему решить через костыли, то есть я сделал такой же массив только уже не в отдельном PlayerInfo а как он был изначально, когда работаю с ним то всё в порядке, я даже могу этому массиву передавать значения из PlayerInfo, но остаётся лишь проблема как запихать данные обратно в PlayerInfo, потому что я пробовал и через оператор FOR но в таком случае оно почему то вообще не работает, так что мне нужно какое то готовое решение как данные массива выгружать и загружать
У тебя получилось? у меня такаиже ошибка
@@landar2570 вместа list используй обычные массивы
А что за my.jslib где этот файл находится?
Здравствуйте. Рассказываем, как создать файл my.jslib, в одном из уроков курса. Посмотреть его можно по ссылке: clck.ru/3AUVUe
Подскажите почему массивы сохраняются с нулевыми значениями.
А playerprefs не даст после обновлений возвращать прогресс?
Что делать если при нажатии на кнопку для перехода в следующий уровень он не переходит, в Unity пишет _Internal assembly: type: member:(null), а когда тестирую в яндексе следующий уровень не включается, если выйти в главное меню игры и нажать играть запускается нужный уровень, при перезагрузке страницы ничего не сохраняется
Здравствуйте. Такое может происходить по многим причинам. Делимся возможными вариантами решений:
1. Проверьте настройки кнопки перехода. Она должна вызывать нужную функцию или метод для загрузки следующего уровня. Убедитесь, что этапы в вашей игре доступны для загрузки.
2. Просмотрите код, отвечающий за переход на следующий уровень. В нём должны использоваться корректные методы или функции для загрузки этапа, например, SceneManager.LoadScene().
3. Проверьте консоль Unity на наличие уведомлений или предупреждений. Они могут указывать на причину, по которой не осуществляется переход на следующий уровень.
Можете объяснить такой момент. Что будет, если я запрошу сохранение игрока с сервера Яндекса, если он первый раз запустит игру?(сохранений там, очевидно, никаких нет)
лично у меня какая то странная ошибка выдаётся и игра ставится на паузу, даже кнопки не работают
@@aramharutyunyan5681 +
@@БогданЖиленко-ж6с Я разобралься со всем этим
Если возникают проблемы с загрузкой данных, например всё идёт к нулю, то удалите DontDestroyOnLoad(gameobject) из скрипта, он у меня был виноват что данные не сохранялись
если выдаёт очень странную ошибку которая состоит из непонятных символов значит что проблема в C# коде, лично у меня GetData() которая берёт имя и фото игрока запускалась в Awake() и из за этого выдавало ошибку, я сделал эту функцию через булеаны(если надо скину код) и нормально работает
Дальше, старайтесь вызывать LoadExtern ранзше всех функций особенно SaveExtern, у меня было такое что я случайно вызывал SaveExtern до LoadExtern и данные при заходе на уровень менялись на 0, абаслютно все, я 2 дня над этим голову ломал
ах да, совсем забыл ребят
Вопрос что будет если первый раз запустить игру и загрузить данные, то в моём случае нечего не происходило, всё нормально работает и нормально сохраняются и загружаются данные после всего этого
@@aramharutyunyan5681 Скинь код, пожалуйста
У меня ошибка cs0106 на public, private.
Я вообще не понимаю, как всё это можно можно понять. Дофига кодов надо писать, это всё ещё и запомнить, как то. Я игру сделал, но в этом моменте, я просто потерян, как и моё желание быть разработчиком. Это очень сложно
Бро, всё познается со временем. Попробуй получше освоиться сначала с самим языком C#, попробовать более простые программы, рано или поздно всё получится. Просто нужно очень много времени
Бро как успехи на данный момент
У меня ошибка "Cannot read properties of undefined (reading 'getData')".
Здравствуйте. Такое уведомление появляется, так как вызов «getData» происходит до того, как «Player» успевает инициализироваться. Необходимо гарантировать порядок вызовов. Подробнее по ссылке: clck.ru/35BEfW
@@yagamesdev да вы всем отвечаете так, кидаете что вы, что тех поддержка ссылку на эту страницу. Но мы делали по ней - это не работает. Не гарантирует ничего. Просто покажите как эту инструкцию применить к вашему проекту. Какой код и куда вставить. А то делаем по инструкции что вы скинули а все равно ошибка, только уже новые.
@@yagamesdev и как это применить к данной ситуации? К данному проекту?
ВАЖНОЕ
РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern
У меня получилось сделать крайне простой костыль
Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока
После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя
И всё будет работать
Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе
Всё!
8:10 Начало разговора про сохранение прогресса
Можно ли в JSON сохранить данные типа string?
Здравствуйте. Да, «JSON» позволяет хранить любые типы данных, в том числе целые классы и массивы. В этом случае нужно использовать сереализацию и десериализацию. Подробнее можно почитать по ссылке: clck.ru/34gqqd
Спасибо!@@yagamesdev
Здраствуйте у меня ошибка выдается DllNotFoundException: _Internal assembly: type: помогите пожалуйста. И за этого база данных не сохраняется помогите
Добрый день. Подобное уведомление преобладает в Android билдах Unity, в Web встречается редко. Необходимо проверить правильность реализации SDK логики проекта. Если это не поможет, рекомендуем удалить папку «Library» и создать чистый билд - «Clean build»
У меня ошибка typeerror cannot read properties of undefined (reading 'SendMessage') помогите
Здравствуйте. Такое уведомление может возникать, если «SendMessage» не был объявлен и остаётся пустым, но при этом происходит попытка считать его данные.
Урок пройден, все реализовал.
Делал всё как сказаноЮ думал что это легкотня, а в итоге при сборке игры получаю в консоли одну ошибку, ссылающуюся на:
================================
{
wr.requestInstances[request].timeout = timeout;
}
function _LoadExtern() {
player.getData().then(_date => {
^
================================
Ломаю голову уже 3 дня, решить никак не могу...
Попробуй обновиться до 2022 версии
привет у меня такая же ошибка
не нашли случайно решение?
@@Мирпофактам обновил Юнити?
не нашли решение? я вот сижу и не как не могу понять причину
Что делать, если не всегда успевают подгрузиться данные с сервера?
Здравствуйте. В таком случае нужно создать искусственную задержку до того момента, пока не загрузятся необходимые данные. В Unity, например, это можно сделать с использованием корутин. Подробнее по ссылке: clck.ru/39ZV92
У меня не работает LoadExtern но тоесть он должен вызывать SetPlayerInfo но он не вызывается я всё перепроверил правильно при этом в яндекс ошибок не выдает я не знаю как исправить
Здравствуйте. Рекомендуем проверить реализацию кода согласно видео.
Если не получится восстановить работу LoadExtern, можно воспользоваться плагином «PluginYG». Он поможет исключить возможные сценарии при работе с SDK. Документация плагина доступна по ссылке: clck.ru/3Bk46k.
@@yagamesdev я уже исправил но выдаёт ошибку другую 351450 typeError cannot read properties of null (reading Send Message) at_gimeplayer. Хотя все хорошо все как по учебнику и я не знаю почему это
TypeError: Cannot read properties of undefined (reading 'getData')
Первый запуск прошёл после исправления index по советам комментаторов. Второй запуск выдаёт ошибку(выше), проверял на пк и телефоне. У автора нет такой ошибки хотя он тоже хранит инты, почему у меня ругается на тип данных. Кто сталкивался?
Здравствуйте. Такое уведомление может отображаться, когда методы SDK, например, GetData, срабатывают до инициализации библиотеки или объекта Player. Необходимо гарантировать порядок вызовов - прописать условие для каждого объекта. Например, если SDK инициализирован, запрашивается инициализация Player. Если Player инициализирован, срабатывает вызов методов работы с данными игрока. Подробнее в Руководстве разработчика: clck.ru/35BEfW
Смог решить проблему?
В jslibe надо коечто поменять
Если запустить игру в режиме инкогнито в браузере вылазит эта ошибка
@@tomvegas4767 Не подскажешь, что нужно поменять в jslib чтобы эта ошибка исчезла?
Будет ли урок про хранение данных в Yandex-Cloud?
Здравствуйте. Все актуальные уроки опубликовали на нашем RUclips-канале. Если появятся новые, расскажем об этом в новостях по ссылке: clck.ru/359uep
@@yagamesdev здравстуйте, может быть где-то есть текстовое описание, как сделать сохрание в клауд?
а как сохранить то что человек уже авторизовался в игре, а то при перезагрузке нужно каждый раз нажимать на кнопку чтобы залогиниться
Здравствуйте. Вы можете проверить на старте игры или перед вызовом окна авторизации, совершил ли пользователь вход в аккаунт. Для этого используется метод Player - player.getMode(). Он возвращает строку lite в случае, если игрок не авторизован в Яндексе. Подробнее в Руководстве разработчика: clck.ru/35HuSQ
ReferenceError: unityInstance is not defined Кто знает как решить?
Здравствуйте. Уведомление «is not defined» может отображаться, если методы SDK срабатывают до завершения инициализации библиотеки. В этом случае нужно гарантировать порядок их вызовов. Подробнее в Руководстве разработчика: clck.ru/3EDjeF.
Кто-нибудь может в итоге скинуть полный html код, чтобы и аватарка и имя игрока выводилось, и чтобы сохранения были. А то ошибки вылазиют. Уже несколько дней застрял тут.
Здравствуйте. Версию файла index.html можно скачать в описании к следующему уроку. Делимся ссылкой: clck.ru/38feoZ
@@yagamesdev Не работает. Возникает ошибка с LoadExtern. Я поменял на тот код, который вы рекомендуете в описании и все равно не работает. Я вызывал этот LoadExtern из Start, потом из Awake, из других методов. Все равно не работает. Я вывел ради теста сохраняемые переменные на экран, они не изменяются вообще. С PlayePrefs проблем вообще никаких.
Та же проблема что и у людей ниже, если нету сохранений или разрешений изначально то дальше загрузки не пускает, ругается "player is not defined at _LoadExtern"
Здравствуйте. Чтобы решить этот вопрос, необходимо инициализировать объект Player на старте игры. Он позволяет проверить авторизацию игрока и наличие его сохранений на сервере. Инструкция в Справке: clck.ru/3559yV
такая же ошибка, все сделано правильно - не понимаю как исправить
@@mmilamix А в итоге как вы исправили данную проблему?
@@yagamesdev Никак потому что когда заходит новый игрок то Яндекс каким то образом инициализирует игрока только после того как он нажмет кнопку играть, а до этого всегда идут функции Awake и Start в которых LoadExtern вызывается и происходит ошибка, хз как исправить
@@yagamesdev и как и где сделать эту инициализацию?
UTF8toString is not defined при сохранении, что делать?
Здравствуйте. Уведомление «UTF8toString is not defined» может появляться, если установлена другая версия Unity. Рекомендуем создавать проект по нашему курсу в версии 2022.1.12f1, либо изменить в коде UTF8ToString() на pointer_stringify().
Здраствуйте когда я пытаюсь тип PlayerInfo преобразовать в строку у меня ошибку выдает у меня в PlayherInfo помимо даных int есть float и list такде по мимо public есть и public static а все спасибо нашел ошибку а так хороший гайд
Здравствуйте. Рады, что вам удалось разобраться и что видео-урок понравился 🙂
Подскажите пожалуйста как сохранить время входа игрока в игру))
Добрый день. Если проект добавлен в каталог через архив в консоли разработчика, то сохранять дату и время не получится. Получать время входа пользователя в игру можно с сервера, на который она загружена.
Кто знает почему в браузере появляется ошибка DllNotFoundException: Unable to load "_Internal" ?
не знаю, актуально ли, но ты не доставил _ перед Internal. Правильно "__Internal"
@@sh_games8780 Здравствуйте, спасибо за ответ. Проверил, но проблема не в этом. Жалко что без сохранений яндекс отказывается принимать игры. А то у меня вся игра готово полностью только с сохранением данных ступор полный.
@@nekto2436 тогда ещё как вариант - нужно проверить название методов в Jslib и c#, может где-то опечаталась и они отличаются.
И в файле Jslib проверить, правильно ли прописали обращение в myGameInstance
@@sh_games8780 Спасибо, проверю :)
@@nekto2436 Попробуйте версию Unity 2021 и выше, желательно стабильную. Я сначала делал на 2020, вообще не компилировалось.
У меня ошибка "DLLNotFoundException"
Здравствуйте. Такое уведомление может возникать, если в my.jslib была допущена неточность. Отметим, что под видео можно скачать уже готовый my.jslib и сравнить с вашим, чтобы выявить недочёт.
Дополнительно рекомендуем убедиться, что версия Unity не младше 2022 года и проверить, чтобы в коде с C# не было уведомлений с «[DllImport("__Internal")]».
Если рекомендации не принесут желаемого результата, пришлите нам подробности в личные сообщения в Telegram: t.me/YandexGamesSupport. Всё проверим и подскажем.
@@yagamesdev а есть способ проще сохранить только прогресс уровня? чтоб игрок начинал с того уровня, на котором остановился
Добрый день. Можно использовать PlayerPrefs.SetInt("CurrentLevel", Номер уровня) для сохранения. После этого при запуске игры брать переменную и загружать нужный уровень. Подробнее в Документации по ссылке: clck.ru/3Aqphx.
Не могу понять как добавлять инфу в "не главные" лидерборды и как её загружать с сервера, не могу понять толи у меня топ пустой и не заполняется, толи он не считывается
Дмитрий, здравствуйте. Чтобы добавить информацию в «не главный» лидерборд, его нужно сделать основным.
@@YandexADV фсмысли? Проблема в чём: есть 2 борды, по максимальному уровню и по кол-ву ходов на каком-то уровне, я закидывал всё как надо и вторая борда не обновлялась. Проблема была в том была, что у ЯИ задержка между запросами секунду и второй запрос просто не обрабатывался
у кого нибудь возникала проблема, что сохранения работают только в одной сессии?
Здравствуйте. Чтобы сохранять и возвращать прогресс игрока в новых сессиях, необходимо запрашивать через SDK данные пользователя на запуске игры. Сделать это можно с помощью метода player.getData(keys). Подробнее в Руководстве разработчика: clck.ru/35HCop
@@yagamesdevувы, делал все как в вашем гайде
@@Oe2k0 Аналогичная фигня. Сижу, думаю, в чём дело...
32:44 Лидерборд
Спасибо
А в констракет 3 как это делать?
Почти 2 года прошло, а с LoadExtern всё еще проблемы
Здравствуйте. Рекомендуем вместо awake вызывать метод loadextern в методе start.
Также необходимо убедиться, что методы вызываются в правильной последовательности и в первую очередь срабатывает инициализация.
Мб если у кого то возникнет проблема что в консоли будет писаться не найден объект прогресс. то просто пересоздайте его в сцене.мне помогло
Роман Сакутин приди, порядок в коде наведи!!!
Порчу наводишь?
Для примеров,очень даже подойдёт код,работоспособный.ну а если нужен идеальный код,то причём Рома Сакутин😂.
Главный инфоцыган в геймдеве
Мантру зачитал
А это работает на версии 2021?
Здравствуйте. Сохранение прогресса через библиотеку SDK Яндекс Игр актуально для любой версии Unity. Документацию с методами сохранения данных можно посмотреть в Руководстве разработчика: clck.ru/34RosY
@@yagamesdev ок
Здравствуйте! А если делать игру не под яндекс игры, а все то же будет отправляться на собственный сервер и получать информацию по ссылке, Всё работает аналогично или что то нужно поменять?
Добрый день. Для сохранения данных и прогресса игрока используются методы SDK Яндекс Игр. Поэтому информация в видеоролике применима только для проектов, которые публикуются на нашей платформе.
этот код не работает и документация в которой не возможно разобраться не программисту на JS
Здравствуйте. Если возникли вопросы по интеграции SDK, задать их можно через форму обратной связи: clck.ru/332j6S
Файл загружен, файл проверяется, Файл загружен, файл проверяется, Файл загружен, файл проверяется
Здравствуйте. Давайте всё детально проверим. Если загрузить архив в консоль разработчика не удалось, напишите нам, пожалуйста, через форму обратной связи по ссылке: clck.ru/34nHbe
А как префсы на сервак сохранять?
Префаб это текстовй документ. Меш объектов, содержащий префаб, его материалы и т.д. хранятся в самой игре. Сериализуйте ваши префабы по id
@@vitaliySobakinson знаю что тоже позднее на 4 месяца ответил и это как закономерность уже, но человек выше спрашивал не про "префабы", а про "префсы". Префсы - это PlayerPrefs(почти то же самое, что мы делали с помощью PlayerInfo). Так вот, в префсы обычно сохраняют настройки музыки, чувствительности мыши и т.д., вот человек и спросил за это.
Видео бесполезное, потому что вылезает такая ошибка Cannot read properties of undefined (reading 'getData'). Автор видео так и не ответил как решить проблему.
Здравствуйте. Такое уведомление появляется, если методы работы с данными игрока вызываются до инициализации SDK или объекта Player. Необходимо гарантировать порядок вызовов, например, через условие then. Инструкция в Руководстве разработчика: clck.ru/3958u8
Не компилируется. Что делать?
@@coyotewld Ну стоит не писать хуйню. И понять что человек в видео договорил все не до конца. Хотя бы упомянуть что код который видео не будет работать на всех версиях юнити а только на 2022
решил?
@@avalonex2971 ну как
Я по другому делаю
syntaxerror unexpected end of json input at json.parse ( anonymous ) ошибка в браузере.В коде jslib все правилнто
Здравствуйте. Такое уведомление появляется из-за пустой строки или массива. Для решения можно использовать «Try Catch». Подробнее по ссылке: clck.ru/38QaJV
syntaxerror unexpected end of json input at json.parse ( anonymous ) в браузере при попытке сохранения выбивает ошибку не пойму что не так
Здравствуйте. Обычно такое уведомление возникает, если в файле JSON присутствует синтаксическое несоответствие. Например, если пропущены или добавлены лишние знаки. Рекомендуем внимательно просмотреть сохранение в файле JSON и дополнительно проверить, что формат кода соответствует описанному в видео. Отметим, что рассмотреть корректность знаков также можно с помощью JSON Linter или JSON Validator.
Ребятки, у кого возникает Syntax error, ну или ещё какие-то ошибки, пропишите при создании публичного поля класса PLayerInfo вотэто:
public PLayerInfo PlayerInfo = new PlayerInfo();
Просто у меня эта ошибка возникла и я очень долго не понимал в чём проблема
public void SetPlayerInfo(string value)
{
PlayerInfo = JsonUtility.FromJson(value);
_playerInfoText.text = PlayerInfo.Level;
}
Такой код, думаю все реализовал как в его коде ,нужно только сохранение прогресса, но выдает ошибку
Ошибка CS0029 Не удается неявно преобразовать тип "int" в "string".
в его коде такого не было, просто преобразавать или я что-то пропустил?
_playerInfoText.text = PlayerInfo.Level.ToString();
Здравствуйте. При вызове метода передавать данные в int нужно в формате string. Конвертировать данные можно, если изменить последнюю строку на следующее:
_playerInfoText.text = PlayerInfo.Level.ToString();
Либо можно добавить отдельные строки:
int a = 0;
SetPlayerInfo(a.ToString())
как решить ошибку в unity: Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
error: undefined symbol: FullAdShow (referenced by top-level compiled C/C++ code)
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _FullAdShow may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: GetLeaderboardScores (referenced by top-level compiled C/C++ code)
warning: _GetLeaderboardScores may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: InitGame_js (referenced by top-level compiled C/C++ code)
warning: _InitGame_js may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: InitLeaderboard (referenced by top-level compiled C/C++ code)
warning: _InitLeaderboard may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: LoadExtern (referenced by top-level compiled C/C++ code)
warning: _LoadExtern may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: OpenURL (referenced by top-level compiled C/C++ code)
warning: _OpenURL may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: PromptShowInternal (referenced by top-level compiled C/C++ code)
Здравствуйте. Для решения вопроса рекомендуем:
1. Удалить папку Library в проекте.
2. Проверить, чтобы плагины соответствовали используемой версии Unity.
Отметим, что на движке версии 2020 не работают плагины 2021+ и наоборот. В курсе используется Unity 2022.
Помогите у меня возникла ошибка Cannot read properties of undefined (reading 'getData')
Здравствуйте. Такое уведомление может появляться, если до вызова метода сохранения и получения данных игрока не совершается инициализация объекта Player. Инструкцию по её настройке можно найти в Руководстве разработчика: clck.ru/34yKrr
Также рекомендуем проверить, что черновик запускается в режиме ракеты. Режим черепахи нужен для тестирования игры и эмуляции ошибок, поэтому некоторые методы в нём могут работать некорректно. Если такое происходит только в режиме черепахи - это не должно повлиять на результаты модерации. Подробнее рассказываем по ссылке: clck.ru/34yKvJ
@@yagamesdev Здравствуйте, Я совершил инициализацию объекта Player, но нечего не поменялось. Также вылезает ошибка Cannot read properties of undefined (reading "getData")
Хотя с телефона и с другова компьютера все работает и данные сохраняются. Я отправил игру на модерацию, и мне отклонили игру по поводу того, что В авторизованной зоне отображается ошибка при первом запуске игры
Здравствуй, решил проблему?@@fedos_
@@ДенисКоругин Конечно смог
ВАЖНОЕ
РЕШЕНИЕ ПРОБЛЕМЫ ДЛЯ ТЕХ У КОГО ОШИБКА СВЯЗАННАЯ С getData и LoadExtern
У меня получилось сделать крайне простой костыль
Берёте и просто пишете скрипт Kostyl, который ожидает нажатия любой клавиши от игрока
После этого, Kostyl вызывает метод в Progress, который подгружает данные (тот самый LoadExtern и всё что вам там надо) и уничтожает себя
И всё будет работать
Ошибки не будет т к подгрузка данных будет осуществляться после того как игрок "доберётся" до игры, т е всё уже будет на своих местах и готово к работе
Всё!