Требования к игре на платформе Яндекс игры, постоянно меняются. Теперь им нужен еще один метод, ysdk.features.LoadingAPI.ready(). Его нужно вызывать, когда игра загрузила все ресурсы и готова к взаимодействию с пользователем.
Для начала у вас должно быть готово в игре хотя бы главное меню, если конечно по задумке игры оно вообще должно быть. У меня просто в игре "Помоги коту Грею" есть главное меню, поэтому метод вызова Game Ready Api, я сделал на этой сцене.
Итак по традиции создаем пустышку с именем Help, в которой создаем пустышку с именем GameReadyApi. И на эту пустышку кидаем скрипт GameReadyApi.cs
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class GameReadyApi : MonoBehaviour
{
#if UNITY_WEBGL
[DllImport("__Internal")]
private static extern void LoadingAPIReady();
[DllImport("__Internal")]
private static extern void GameplayAPIStart();
[DllImport("__Internal")]
private static extern void GameplayAPIStop();
#endif
public void OnLoadingAPIReady()
{
LoadingAPIReady();
}
public void OnGameplayAPIStart()
{
GameplayAPIStart();
}
public void OnGameplayAPIStop()
{
GameplayAPIStop();
}
}
Теперь этот скрипт можно будет вызывать из других скриптов, где нам нужно будет обращаться к GameReadyApi. Я сделал запуск метода LoadingAPI.ready(), в скрипте MainMenu.cs, в котором помимо этого метода, есть еще и другие методы, а именно настройка громкости звуков и перевод текстов в игре. Эти методы я вырежу, чтобы вас они не отвлекали от главной темы. Если кому нужен полный код скрипта MainMenu.cs, пишите в комментарии, с радостью поделюсь.
На пустышку Help кидаем скрипт MainMenu.cs.
public class MainMenu : MonoBehaviour
{
public GameReadyApi m_GameReadyApi; // Ссылка на скрипт GameReadyApi.cs
private void Start()
{
#if UNITY_WEBGL
m_GameReadyApi.OnLoadingAPIReady();
#endif
}
// Далее ваши уже методы
}
Создаем в папке Yandex папку Plugins, в которой создаем скрипт с таким вот расширением jslib. Назовем этот скрипт my.jslib
mergeInto(LibraryManager.library, {
LoadingAPIReady: function(){
console.log("--------Podkluchaem API--------");
ysdk.features.LoadingAPI.ready();
console.log("--------Podkluchili API--------");
},
GameplayAPIStart: function(){
ysdk.features.GameplayAPI.start()
console.log("--------Start API--------");
},
GameplayAPIStop: function(){
ysdk.features.GameplayAPI.stop()
console.log("--------Stop API--------");
}
});
Главное, учтите в скрипте my.jslib не делайте лишних запятых или точек, он должен быть в точь-точь как у меня.
Если же у вас уже есть подобный скрипт, к примеру, для вызова реклама, тогда надо ставить запятую в вашем методе, а далее вставлять уже методы GameReadyApi
GameplayAPIStop: function(){
ysdk.features.GameplayAPI.stop()
console.log("--------Stop API--------");
}
} тут запятую не ставьте!!! Иначе будет ошибка, при билде игры. В общем смотрите внимательно, как сделан у меня скрипт, и добавляйте правильно кусок кода уже в ваш скрипт.
Собственно говоря, у тех, у кого нет паузы в игре, дальше статью могут не читать. Ну, а остальным нужно еще немного времени уделить статье, чтобы полностью подключить метод GameReadyApi.
Переходим в сцену с геймплеем, уровень игры. Тут уже по накатанной традиции.
Создаем пустышку с именем Help, в которой создаем пустышку с именем GameReadyApi. И на эту пустышку кидаем скрипт GameReadyApi.cs
Здесь же создаем пустышку с именем Pause. И на эту пустышку кидаем скрипт Pause.cs. Здесь все просто, когда пауза в игре вызываем метод ysdk.features.GameplayAPI.stop(), а когда снимаем с паузы вызываем метод ysdk.features.GameplayAPI.start().
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pause : MonoBehaviour
{
public GameReadyApi m_GameReadyApi;
public float timing;
public bool isPaused;
private void Update()
{
Time.timeScale = timing;
if (isPaused == false)
{
timing = 1f;
#if UNITY_WEBGL && !UNITY_EDITOR
m_GameReadyApi.OnGameplayAPIStart();
#else
Debug.Log("GameplayAPIStart");
#endif
}
if (isPaused == true)
{
timing = 0;
#if UNITY_WEBGL && !UNITY_EDITOR
m_GameReadyApi.OnGameplayAPIStop();
#else
Debug.Log("GameplayAPIStop");
#endif
}
if (Input.GetKeyDown(KeyCode.Tab))
{
PauseButton();
}
}
public void PauseButton() // кнопка пауза
{
if (isPaused == false)
{
isPaused = true;
}
else if (isPaused == true)
{
isPaused = false;
}
if (isPaused == true)
{
timing = 0;
}
else if (isPaused == false)
{
timing = 1f;
}
}
public void ResumeButton() // кнопка продолжить
{
isPaused = false;
timing = 1f;
}
}
Не забудьте на сцене заполнить этот скрипт. Если есть у вас в игре кнопки пауза, продолжить, тогда можете на них кидать методы PauseButton() и ResumeButton().
Конечно для этого нужно еще в скрипте прописать public GameObject CanvasPause;
Когда вызываете паузу этот CanvasPause появляется, а когда выходите из паузы этот CanvasPause убирается. Я думаю, такое вы не раз уже делали, так что разберётесь.
Надеюсь, статья вам была полезна!!! Если возникли вопросы, пишите в комментарии.
Как подключить Game Ready Apiпо этой статье, я реализовал в моей браузерной игре «Помоги коту Грею».
Ссылка на видео игры
https://dzen.ru/video/watch/6718b5dae8ddc9328ec5ab89
Информацию по моим играм можно посмотреть на сайте https://vk.com/public199787643