Afficher une image / une vidéo à la fin d'une video

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Afficher une image / une vidéo à la fin d'une video

Message par kealkeal » 21 Sep 2011 16:24

Bonjour,

J'ai un plan qui diffuse une vidéo dans la scène 3D.

La vidéo se diffuse avec du son dés lors que je clique sur le plan.

Si je re-clique sur le plan, alors la vidéo s’arrête et j'ai une image (video_pause) qui apparait pour indiquer à l'internaute qu'il peut re-cliquer sur le plan pour relancer la vidéo.

Voici mes questions :

1) J'aimerai que l'image (video_pause) s'affiche dés lors que la vidéo est terminée.
2) J'aimerai qu'à la fin de va vidéo, une autre vidéo se mette à tourner en boucle.

PS : Je sais que la Question 1et 2 ne peuvent être mis dans le même script car cela n'est pas possible, mais j'essaye différentes solutions. ;)

Voici le code que j'ai :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class video_cursor : MonoBehaviour {
	
	public string lastTooltip = "";
	public Texture2D 	cursor;
	private Texture2D	hand;
	public Texture2D	video_pause;
	private bool isOver = false;
	public GUISkin mySkin;
	public MovieTexture movTexture;
	
	void Start()
	{	
		renderer.material.mainTexture = video_pause;
 			//movTexture.Play();
			//audio.Play();
	}

	void OnMouseOver()
	{	
			Screen.showCursor = false;
			hand = cursor;
			isOver = true;
	}

	void OnMouseExit()
	{
		Screen.showCursor = true;
		hand = null;
		isOver = false;
	}

	void OnGUI()
	{
		if (mySkin != null) GUI.skin = mySkin;
		// DEFINITION DE LA TOOLTIP VIA UN GUICONTENT - VOIR DOC UNITY POUR TOOLTIP CUSTOM
		
		GUI.Label(new Rect(Event.current.mousePosition.x - 12.5f, Event.current.mousePosition.y, 25, 25), new GUIContent (hand,lastTooltip));
		
		// ACTIVATION DE LA VISIBILIT2 DE LA TOOLTIP EN CAST LABEL
		if (isOver)
	  		GUI.Label(new Rect(Event.current.mousePosition.x - 50, Event.current.mousePosition.y + 25, 200, 25), GUI.tooltip, mySkin.customStyles[0]);
	}

	void OnMouseDown()
	{
		if (collider.isTrigger == true)
 		{
			renderer.material.mainTexture = video_pause;	
 			Screen.showCursor = false;
 			movTexture.Stop();
			audio.Stop();
			collider.isTrigger = false;
		 }
 		else
		{
			renderer.material.mainTexture = movTexture;	
 			movTexture.Play();
			audio.Play();
			collider.isTrigger = true;
		}			
	}
}
Merci pour votre aide. ;)
kealkeal

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Afficher une image / une vidéo à la fin d'une video

Message par cayou66 » 21 Sep 2011 17:00

Les deux questions posent le même problème: Savoir quand la vidéo est finie.

http://unity3d.com/support/documentatio ... xture.html
Tu as une variable "isPlaying". Check là à chaque tour d'update, si elle ne joue plus, tu peux afficher ton image "fin" ou "pause". Ou lancer une autre vidéo.

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Afficher une image / une vidéo à la fin d'une video

Message par kealkeal » 21 Sep 2011 17:50

Euh oui bonne idée.

Mais tu fais ça comment ? :roll:
kealkeal

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Afficher une image / une vidéo à la fin d'une video

Message par cayou66 » 21 Sep 2011 17:54

Une fois la vidéo qui tourne dans ton update tu fais ça:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public MovieTexture movTexture1;
    public MovieTexture movTexture2;
    void Start() {
        renderer.material.mainTexture = movTexture1;
        movTexture1.Play();
    }
  void Update()
  {
    if(!movTexture1.isPlaying) //fin de la vidéo
    {
      renderer.material.mainTexture = movTexture2;
      movTexture2.Play();
    }
  }
}

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Afficher une image / une vidéo à la fin d'une video

Message par cayou66 » 22 Sep 2011 09:12

Alors, ça marche :?:

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Afficher une image / une vidéo à la fin d'une video

Message par kealkeal » 22 Sep 2011 09:26

Je vais tester ton code ce matin ! ;)

Je te tiens au courant.
kealkeal

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Afficher une image / une vidéo à la fin d'une video

Message par kealkeal » 22 Sep 2011 09:48

J'ai mis en place le code mais j'ai un soucis :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class video_cursor : MonoBehaviour {

	public string lastTooltip = "";
	public Texture2D 	cursor;
	private Texture2D	hand;
	public Texture2D	video_pause;
	public Texture2D	video_stop;
	private bool isOver = false;
	public GUISkin mySkin;
	public MovieTexture movTexture;
	
	void Update()
  {
    if(!movTexture.isPlaying) //fin de la vidéo
    {
      renderer.material.mainTexture = video_stop;
   
    }
  }
	void Start()
	{	
		renderer.material.mainTexture = video_pause;
	}

	void OnMouseOver()
	{
			Screen.showCursor = false;
			hand = cursor;
			isOver = true;
	}

	void OnMouseExit()
	{
		Screen.showCursor = true;
		hand = null;
		isOver = false;
	}

	void OnGUI()
	{
		
		if (mySkin != null) GUI.skin = mySkin;
		// DEFINITION DE LA TOOLTIP VIA UN GUICONTENT - VOIR DOC UNITY POUR TOOLTIP CUSTOM
		
		GUI.Label(new Rect(Event.current.mousePosition.x - 12.5f, Event.current.mousePosition.y, 25, 25), new GUIContent (hand,lastTooltip));
		
		// ACTIVATION DE LA VISIBILIT2 DE LA TOOLTIP EN CAST LABEL
		if (isOver)
	  		GUI.Label(new Rect(Event.current.mousePosition.x - 50, Event.current.mousePosition.y + 25, 200, 25), GUI.tooltip, mySkin.customStyles[0]);
	}

	void OnMouseDown()
	{
		
		if (collider.isTrigger == true)
 		{
			renderer.material.mainTexture = video_pause;	
 			Screen.showCursor = false;
 			movTexture.Stop();
			audio.Stop();
			collider.isTrigger = false;
		 }
 		else {
			renderer.material.mainTexture = movTexture;	
 			movTexture.Play();
			audio.Play();
			collider.isTrigger = true;
		}			
	}
	
}
Je souhaite avoir ceci :

1) Lorsque je lance la scène 3D alors la texture "video_pause" est visible sur le plan
2) Lorsque je clique sur le plan "video_pause" est remplacé par la vidéo
3) Lorsque la vidéo est terminée, la vidéo est remplacée par la texture "video_stop"

Avec ton code la texture "video_stop" est visible dés le lancement de la scène.

Merci pour ton aide.
kealkeal

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Afficher une image / une vidéo à la fin d'une video

Message par cayou66 » 22 Sep 2011 10:00

Je me suis douté de ça.
Il te faut une variable en plus, un booléen, que tu mettra à true une fois la vidéo lancée.
Et tu fais un test au niveau de ton Update, si il est vrai tu regarde si la vidéo tourne encore.
C'est à dire qu'au départ, isPlaying est faux mais il faut réagir après la lecture de la vidéo.

Donc:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class video_cursor : MonoBehaviour {

   public string lastTooltip = "";
   public Texture2D    cursor;
   private Texture2D   hand;
   public Texture2D   video_pause;
   public Texture2D   video_stop;
   private bool isOver = false;
   public GUISkin mySkin;
   public MovieTexture movTexture;

private bool IsPlaying = false;
   
   void Update()
  {
    if(!movTexture.isPlaying && IsPlaying) //fin de la vidéo
    {
      renderer.material.mainTexture = video_stop;
      
    }
  }
   void Start()
   {   
      renderer.material.mainTexture = video_pause;
   }

   void OnMouseOver()
   {
         Screen.showCursor = false;
         hand = cursor;
         isOver = true;
   }

   void OnMouseExit()
   {
      Screen.showCursor = true;
      hand = null;
      isOver = false;
   }

   void OnGUI()
   {
      
      if (mySkin != null) GUI.skin = mySkin;
      // DEFINITION DE LA TOOLTIP VIA UN GUICONTENT - VOIR DOC UNITY POUR TOOLTIP CUSTOM
      
      GUI.Label(new Rect(Event.current.mousePosition.x - 12.5f, Event.current.mousePosition.y, 25, 25), new GUIContent (hand,lastTooltip));
      
      // ACTIVATION DE LA VISIBILIT2 DE LA TOOLTIP EN CAST LABEL
      if (isOver)
           GUI.Label(new Rect(Event.current.mousePosition.x - 50, Event.current.mousePosition.y + 25, 200, 25), GUI.tooltip, mySkin.customStyles[0]);
   }

   void OnMouseDown()
   {
      
      if (collider.isTrigger == true)
      {
         renderer.material.mainTexture = video_pause;   
         Screen.showCursor = false;
         movTexture.Stop();
         audio.Stop();
         collider.isTrigger = false;
       }
      else {
         renderer.material.mainTexture = movTexture;   
         movTexture.Play();
         audio.Play();
         collider.isTrigger = true;
         IsPlaying = true;
      }         
   }
   
}

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Afficher une image / une vidéo à la fin d'une video

Message par kealkeal » 22 Sep 2011 10:08

Je ne dirai qu'un mot : "PARFAIT" ! :)

Merci pour ton aide. ;)
kealkeal

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Afficher une image / une vidéo à la fin d'une video

Message par cayou66 » 22 Sep 2011 11:00

Heureux que ça fonctionne ;)

Répondre

Revenir vers « Scripting »