[DB-AL] Mettre une vidéo en splash screen

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
RIO
Messages : 10
Inscription : 31 Oct 2018 16:18

[DB-AL] Mettre une vidéo en splash screen

Message par RIO » 31 Oct 2018 16:35

Bonjour à tous,

Pour un projet sur lequel je travail en ce moment j'aimerai y ajouter un écran splash screen, mais j'aimerai que cet écran affiche une vidéo que j'ai fais avec after effect.

J'ai créer une scène avec un vidéo player, celui ci marche très bien jusqu'à ce que j'ajoute un script pour changer de scène.
Quand j'ajoute mon script ma scène se charge bien au bout de 10 seconde (comme je l'ai préciser dans ma fenêtre animation) cependant la vidéo ne se lance plus.

Auriez-vous une idée de ce que je peux faire pour fixer ce petit souci ?

Code : Tout sélectionner

 using UnityEngine;
using UnityEngine.Video;
using System.Collections;
using System.Collections.Generic;

public class MovieController : MonoBehaviour
{
    private VideoPlayer m_VideoPlayer;

    void Awake()
    {
        m_VideoPlayer = GetComponent<VideoPlayer>();
        m_VideoPlayer.loopPointReached += OnMovieFinished; 
    }

    void OnMovieFinished(VideoPlayer player)
    {
        Debug.Log("Event for movie end called");
        player.Stop();
       
    }

    public void LoadNewScene()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Main");
    }

}
 



Sachant que j'ai essayer en mettant un script uniquement pour changer de scène, mais je suis arrivé au même résultat.

Merci :super:

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

Re: [DB-AL] Mettre une vidéo en splash screen

Message par boubouk50 » 31 Oct 2018 18:31

Salut,

ta vidéo est bien en Play Auto? pour qu'elle se lance dès le début.
Sinon, as-tu vérifié si la vidéo n'est pas stoppé dès le départ à cause de l'event OnMovieFinished. Je vois le Debug.Log ajouté, il n'apparaît pas avant la fin?
"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

RIO
Messages : 10
Inscription : 31 Oct 2018 16:18

Re: [DB-AL] Mettre une vidéo en splash screen

Message par RIO » 31 Oct 2018 19:42

Salut à toi, merci pour ta réponse.

Je suis bien en play auto, lorsque je lance ma scène sans le script pour changer de scène, la vidéo se lance sans problème.

Pour ta deuxième question, je ne peux pas trop te répondre, je suis débutant en programmation et donc très limité, pour être honnête j'ai repris un script que tu avais toi même fait il y a longtemps, auquel j'ai ajouter une fonction pour changer de scène :

http://www.unity3d-france.com/unity/php ... p?t=15384


Cela peut-il venir du Render mode du vidéo player ? je suis en camera near plane.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB-AL] Mettre une vidéo en splash screen

Message par djulio74 » 31 Oct 2018 21:02

salut.

Je pense que ton soucis ici c'est qu'a aucun moment tu n'attend la fin de la vidéo.
Ta void OnMovieFinished devrait etre une coroutine comme dans le lien que tu donne.
Ici tu lance ta vidéo, et en même temps void OnMovieFinished qui directement stop le player, sans en attendre la fin.

Code : Tout sélectionner

 using UnityEngine;
using UnityEngine.Video;
using System.Collections;
using System.Collections.Generic;

public class MovieController : MonoBehaviour
{
    private VideoPlayer m_VideoPlayer;

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

    IEnumerator OnMovieFinished()
    {
    	// on verifie si la frame en cours est la derniere frame de la vidéo.
    	// si c'est pas le cas ( != ) on revérifie encore et encore
    	// le "while" en gros, stop la fonction et qui ne redémarre que si la condition est vérifiée
    	while (m_VideoPlayer.frame != m_VideoPlayer.frameCount) { 
        	yield return null;	
        }
        
        // si la vidéo est à la fin, on continue :
        //avec le lancement de la nouvelle scène        
        LoadNewScene();
       
    }

    public void LoadNewScene()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Main");
    }

}
Si tu te comprend pas , regarde par ICI ou ICI, ce sont les docs d'unity. ;)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

RIO
Messages : 10
Inscription : 31 Oct 2018 16:18

Re: [DB-AL] Mettre une vidéo en splash screen

Message par RIO » 31 Oct 2018 22:07

Salut Djulio74,

Merci pour ta réponse et la doc, j'y vois un peu plus clair même si je ne suis pas sur d'encore tout saisir.

Par contre j'ai un petit souci lorsque je recopie ton code sur mon éditeur de texte. J'ai une erreur, tout ce qu'il entre parenthèses après le while est souligné en rouge.
Le logiciel m'indique " L'opérateur != est ambigu pour des opérandes de type "long" et ulong"

J'ai chercher une solution sur internet sans rien trouvé. Désolé je me sens un peu bête mais j'y connais pas encore grand chose.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB-AL] Mettre une vidéo en splash screen

Message par djulio74 » 01 Nov 2018 00:12

En effet après avoir tester, même problème.
Cela est du au fait qu'une vidéo peut avoir une énorme quantité de frame.

remplace la ligne du while par celle là :

Code : Tout sélectionner

while ((int)m_VideoPlayer.frame != (int)m_VideoPlayer.frameCount) {
en fait le (int) transforme un long en int qu'il est alors possible de comparer avec un autre int
Évidemment cela marche pour de courtes vidéos, pas sur ce soit valable pour un film de deux heures. ^^

teste et dit moi si ça marche ( Je n'ai jamais utilise les vidéo alors.... )

Il faut évidement que "Play on awake" soit coché dans tes VideoPlayer.
Sinon, par curiosité, quel est le but de ton "Jeux"? c'est une visionneuse interactive de vidéos ? ;-)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

RIO
Messages : 10
Inscription : 31 Oct 2018 16:18

Re: [DB-AL] Mettre une vidéo en splash screen

Message par RIO » 01 Nov 2018 00:38

Merci j'ai plus d'erreurs avec la fonction while, cependant maintenant j'ai une erreur avec " public void LoadNewScene() ".
ça me fait 3 erreurs dans unity :

- Unexpected symbol `public'
- Keyword `void' cannot be used in this context
- Unexpected symbol `('



Pour ce qui est du jeu, ça n'a pas vraiment de rapport avec les vidéo à vrai dire. J'ai acheter un template sur l'asset store que je modifie à ma sauce. Si je vous embête avec mes problèmes c'est parce je voudrai mettre une vidéo que j'ai faites en slash screen lorsque qu'on démarre le jeu.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [DB-AL] Mettre une vidéo en splash screen

Message par Farstone » 01 Nov 2018 00:49

Salut, essaye de remplacer

Code : Tout sélectionner

StartCoroutine (OnMovieFinished()); 
par

Code : Tout sélectionner

StartCoroutine ("OnMovieFinished"); 

RIO
Messages : 10
Inscription : 31 Oct 2018 16:18

Re: [DB-AL] Mettre une vidéo en splash screen

Message par RIO » 01 Nov 2018 00:58

Salut,

j'ai essayer mais j'ai toujours le même problème avec "public void LoadNewScene() ".

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB-AL] Mettre une vidéo en splash screen

Message par djulio74 » 01 Nov 2018 00:59

Verifie que tu n'ai pas de faute de frappe.
Avec ça je n'ai aucune erreur :

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.Video;
using System.Collections;
using System.Collections.Generic;

public class MovieController : MonoBehaviour
{
	private VideoPlayer m_VideoPlayer;

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

	IEnumerator OnMovieFinished()
	{
		
		while (m_VideoPlayer.frame != (int)m_VideoPlayer.clip.frameCount) {  // rajouter .clip 
			yield return null;	
		}

		LoadNewScene();

	}

	public void LoadNewScene()
	{
		UnityEngine.SceneManagement.SceneManager.LoadScene("Main");
		print("End Video");
	}

}
et même essayé avec un bout de vidéo, le print("End Video"); s'affiche bien à la fin de la vidéo.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « (C#) CSharp »