Контроль окончания видео в unity

152
03 декабря 2019, 07:20

новичок в программировании, пытаюсь сделать интро (видео) в игре и после окончания этого видео должно совершиться определенное действие (а именно переход на другую сцену). Пыталась осуществить с помощью количества кадров в видео, но не получилось. Использовала VideoPlayer. В официальной документации похожего функционала не нашла. Помогите, пожалуйста(

код неудачной попытки

public void AutoLoadOurMenu()
{ 
    ulong numberFramesInVideo; //количество кадров в видео
    numberFramesInVideo = videoPlayer.frameCount; 
    ulong numberOfCurrentFrame; //номер текущего кадра 
    numberOfCurrentFrame = (ulong) videoPlayer.frame; 
    if (numberOfCurrentFrame== numberFramesInVideo) //ещё не совсем поняла, с 0 
    //или 1 идет отсчет кадров, но так: if (numberOfCurrentFrame== 
   // numberFramesInVideo-1) тоже пробовала, тоже неудачно
    {
     Application.LoadLevel(1);
     }
}
Answer 1

VideoPlayer содержит в себе событие loopPointReached, которое вызывается, когда VideoPlayer достигает конца видео. Чтобы оно сработало, в VideoPlayer должно быть включено зацикливание (loop). Чтобы вызвать какую-то функцию по окончанию видео, необходимо эту функцию на это событие подписать:

void OnEnable() //Сначала подписываем нашу функцию на событие конца видео
{
    videoPlayer.loopPointReached += OnVideoEnd;
}
void OnDisable() //Отписываем для предотвращения утечки памяти
{
    videoPlayer.loopPointReached -= OnVideoEnd;
}
void OnVideoEnd(UnityEngine.Video.VideoPlayer causedVideoPlayer)
{
    //Нужный вам код, который будет выполняться, когда видео закончится
}

Ссылки: https://forum.unity.com/threads/how-to-know-video-player-is-finished-playing-video.483935/ https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html https://docs.unity3d.com/ScriptReference/Video.VideoPlayer-loopPointReached.html

Answer 2

Если Вы хотите таким же способом, то Вам нужно было изменить лишь несколько моментов:

ulong numberFramesInVideo; //количество кадров в видео (где ulong заранее объявлен)
private void Start(){ 
  numberFramesInVideo = videoPlayer.frameCount; 
}
public void Update()
{    
    if (videoPlayer.frame >= numberFramesInVideo)Application.LoadLevel(1);
}
READ ALSO
Нужно отменить автоисправление { code(); } в Visual Studio

Нужно отменить автоисправление { code(); } в Visual Studio

Когда я пишу код, Visual Studio сам после } исправляет все скобки с переносом на другую строку

124
Не тот html код по ссылке

Не тот html код по ссылке

Требуется получить в строку html код, формирующийся при переходе по ссылке https://usernamegithub

149
Не работает CURL локально на PYTHON с PHP

Не работает CURL локально на PYTHON с PHP

Есть сайт локально на докере, который должен юзать CURLНужно просто чтобы он работал, к примеру я хочу взять страницу и вывести, страница html

117