changement de scene à la fin de la video

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
6lvain
Messages : 1
Inscription : 12 Mars 2018 16:49

changement de scene à la fin de la video

Message par 6lvain » 12 Mars 2018 17:00

Bonjour à tous,

J'ai une scene qui joue au lancement une video à 360 degrés en skybox. Je voudrais qu'à la fin de la video, la scene change automatiquement pour une autre. Et là, je sèche. Je trouve des infos à droite à gauche, mais pas suffisament compréhensibles pour moi.

J'ai déjà réussi à faire un script pour changer de scene après un click sur un gameobject (mon projet se compose d'une scene Menu qui permet de choisir entre 4 autres scenes qui sont des videos) et c'était pour moi un exploit (mon métier c'est cameraman, pas developpeur :) )

J'ai aussi réussi à faire des animations, à démarrer une video au sein de ma scene après une animation d'objets, mais là, je ne trouve pas.

Dois je utiliser videoplayer.play ? en demandant que dès que le videoplayer ne joue plus le scenemanager intervienne ?

J'ai lu aussi que je pouvais utiliser videoplayer.loopPointReached ....

Bref, au secours !

Sylvain

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: changement de scene à la fin de la video

Message par boubouk50 » 12 Mars 2018 18:20

Bonjour Sylvain,

2 méthodes: Récupérer l'événement de fin de vidéo ou bien attendre que la vidéo ne joue plus.
De ce que je vois sur les internets, l'événement n'est pas stable, il n'est pas toujours envoyé. Un bug a été levé et probablement corrigé en fonction de la version que tu utilises.

Code : Tout sélectionner

//A METTRE SUR LE GAMEOBJECT QUI CONTIENT LE VIDEOPLAYER

using UnityEngine;
using UnityEngine.Video;

public class MovieController : MonoBehaviour
{
    private VideoPlayer m_VideoPlayer;

    void Awake () 
    {
        m_VideoPlayer = GetComponent<VideoPlayer>();
        m_VideoPlayer.loopPointReached += OnMovieFinished; // loopPointReached is the event for the end of the video
    }

    void OnMovieFinished(VideoPlayer player)
    {
        Debug.Log("Event for movie end called");
        player.Stop();
        //ICI CHARGER LA SCÈNE VOULUE
    }
}
Sinon tu peux attendre la fin en demandant à chaque fois, si la vidéo est terminée.

Code : Tout sélectionner

//A METTRE SUR LE GAMEOBJECT QUI CONTIENT LE VIDEOPLAYER

using UnityEngine;
using UnityEngine.Video;

public class MovieController : MonoBehaviour
{
	private VideoPlayer m_VideoPlayer;
	private IEnumerator coroutine;

    void Start () 
    {
        m_VideoPlayer = GetComponent<VideoPlayer>();
        coroutine = OnMovieFinished ();
	StartCoroutine (coroutine);
    }

    IEnumerator OnMovieFinished ()
    {
    	//A chaque image, regarder si on a atteint la dernière
        while (videoPlayer.frame != videoPlayer.frameCount) {
        	yield return new WaitForEndOfFrame();
        }
        //ICI CHARGER LA SCÈNE VOULUE
    }
}
Il se peut que le code ne soit pas bon du premier coup, je ne l'ai pas testé.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripting »