Faire un slide show d'images

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Faire un slide show d'images

Message par Freelax » 22 Déc 2010 13:50

Allez c'est l'effet noel! :) Cadeau en avance!

Je l'ai fait en Cs car le js, je supporte pas ! :D
A toi de le transcrire, c'est pas bien compliqué.. ;)

Ya juste un petit souci de décalage mais bon le principe est là! :lol:

Code : Tout sélectionner

using UnityEngine;
using System.Collections; 

public class CoverflowCS : MonoBehaviour {
	
	public bool deplaceGo;        // Declanchement de deplacement
        public int vitesse = 1;        // Vitesse de deplacement
        public Transform[] plans;     // Array Plans
	public Object[] textures;     // Array Textures

	void Start() 
    { 
		textures = Resources.LoadAll("Textures", typeof(Texture2D));  // On recup les textures dans le dossiers
		
		for (int i = 0; i < plans.Length; i++)  // On affecte une texture au hasard a chaque plan
		{ 
			plans[i].renderer.material.mainTexture = (Texture2D) textures[Random.Range(0, textures.Length)];
		}
	}
	
	void OnGUI() 
    { 
		if (GUI.Button(new Rect( 0, 0, 100, 20 ), "Deplacement")) { deplaceGo = true; } // Lance le deplacement
		if(deplaceGo){ Deplacement(); } // Deplacement
	}
		
    void Deplacement()  // Fonction deplacement
	{
		if(plans[0].transform.position.x > -40){ // On deplace le tout tant que le plan a gauche est superieur a 40 en x (visibilité cam)
			plans[0].transform.position -= new Vector3(vitesse, 0, 0); 
			plans[1].transform.position -= new Vector3(vitesse, 0, 0); 
			plans[2].transform.position -= new Vector3(vitesse, 0, 0); 
			plans[3].transform.position -= new Vector3(vitesse, 0, 0); 
		}
		else{  // sinon si la position de plan le plus a gauche est inferieur a 40 (visibilité de la cam), on stop le deplacement, on prend ce meme plan et on le met à droite
			plans[0].transform.position = new Vector3(40, 0, 0); 
			deplaceGo = false;
			Replace();
		}
	}	
	
    void Replace() // on restructure l'array pour mettre  l'ancien premier plan en dernier, le 2eme en 1er etc...
	{
		Transform planfin = plans[0];
		plans[0] = plans[1];
		plans[1] = plans[2];
		plans[2] = plans[3];
		plans[3] = planfin;
		
		TextureChange(planfin);  // et enfin on change la texture en indiquant le nouveau dernier plan
	}	
	
    void TextureChange(Transform _planfin) 
	{
       _planfin.renderer.material.mainTexture = (Texture2D) textures[Random.Range(0, textures.Length)];
	}
}
Je te met le package : ;)
Pièces jointes
CoverFlow.rar
(231.89 Kio) Téléchargé 176 fois
Image

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

Re: Faire un slide show d'images

Message par kealkeal » 22 Déc 2010 14:52

Merci Freelax pour ton aide !

Par contre je n'arrive pas à faire fonctionner ton script.

J'ai importé ton package.

J'ai nommé les plans de la gauche vers la droite comme ceci :

plan0
plan1
plan2

Je vois bien le bouton "Déplacement" s'afficher mais si je clique dessus, il ne se passe rien ... :roll:

Unity m'affiche ce message d'erreur :
(Filename: Assets/Scripts/CoverflowCS.cs Line: 29)

IndexOutOfRangeException: Array index is out of range.
Tu peux m'aider ?

Merci
kealkeal

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Faire un slide show d'images

Message par Freelax » 22 Déc 2010 15:41

Tu as chargé la scene contenu dans le package?

elle contient les plans et tout, normalement tu as juste à compiler...

L'export la peu être zappé...au cas ou la voilà... ;)
Pièces jointes
coverflowScene.rar
(3.74 Kio) Téléchargé 167 fois
Image

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

Re: Faire un slide show d'images

Message par kealkeal » 22 Déc 2010 17:30

J'ai réussit à faire fonctionner ton script.

Par contre j'ai un soucis, car tu as mis en place 4 plans dans ton script.

Moi je n'ai que 3 plans, j'ai donc modifié ton script et j'obtiens ceci :

Code : Tout sélectionner

using UnityEngine;
using System.Collections; 

public class CoverflowCS : MonoBehaviour {
	
	public bool deplaceGo;        // Declanchement de deplacement
	public int vitesse = 1;        // Vitesse de deplacement
    public Transform[] plans;     // Array Plans
	public Object[] textures;     // Array Textures

	void Start() 
    { 
		textures = Resources.LoadAll("Textures", typeof(Texture2D));  // On recup les textures dans le dossiers
		
		for (int i = 0; i < plans.Length; i++)  // On affecte une texture au hasard a chaque plan
		{ 
			plans[i].renderer.material.mainTexture = (Texture2D) textures[Random.Range(0, textures.Length)];
		}
	}
	
	void OnGUI() 
    { 
		if (GUI.Button(new Rect( 0, 0, 100, 20 ), "Deplacement")) { deplaceGo = true; } // Lance le deplacement
		if(deplaceGo){ Deplacement(); } // Deplacement
	}
		
    void Deplacement()  // Fonction deplacement
	{
		if(plans[0].transform.position.x > -15){ // On deplace le tout tant que le plan a gauche est superieur a 40 en x (visibilité cam)
			plans[0].transform.position -= new Vector3(vitesse, 0, 0); 
			plans[1].transform.position -= new Vector3(vitesse, 0, 0); 
			plans[2].transform.position -= new Vector3(vitesse, 0, 0); 
			
		}
		else{  // sinon si la position de plan le plus a gauche est inferieur a 40 (visibilité de la cam), on stop le deplacement, on prend ce meme plan et on le met à droite
			plans[0].transform.position = new Vector3(15, 6, 0); 
			deplaceGo = false;
			Replace();
		}
	}	
	
    void Replace() // on restructure l'array pour mettre  l'ancien premier plan en dernier, le 2eme en 1er etc...
	{
		Transform planfin = plans[0];
		plans[0] = plans[1];
		plans[1] = plans[2];
		plans[2] = planfin;
		
		
		TextureChange(planfin);  // et enfin on change la texture en indiquant le nouveau dernier plan
	}	
	
    void TextureChange(Transform _planfin) 
	{
       _planfin.renderer.material.mainTexture = (Texture2D) textures[Random.Range(0, textures.Length)];
	}
}
Sur le gameobject j'ai indiqué que je n'utilisais que 3 plan et j'ai associé mes plans pour chacun des éléments.

Quand j'execute le projet, il y a un décallage, comme si il chargait un 4 eme plan qui n'existe pas et j'ai des plans qui se chevauchent au bout d'un moment.

As tu une solution ?

Merci.
kealkeal

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Faire un slide show d'images

Message par Freelax » 22 Déc 2010 17:36

Alors enfaite le 4eme est obligatoire mais il ne doit pas être visible par la cam, c'est lui qui charge la futur texture venant de droite ;)

si tu veut que 3 plans soit visibles, il te faut le 4eme hors champ camera pour précharger la texture avant le clique et non pendant le clique;)

tu vois ce que je veut dire?
Image

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

Re: Faire un slide show d'images

Message par kealkeal » 22 Déc 2010 17:42

C'est parfait !

Les textures se chargent de maniere aléatoire sur les plans, est il possible de voir si une texture est déjà présente sur l'un des plans pour ne pas l'afficher en double ou en triple ? :roll:
kealkeal

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Faire un slide show d'images

Message par Freelax » 22 Déc 2010 17:55

Ouai bien sur ;)

En haut tu rajoute une variable dans les déclarations, elle stockera l'id actuel de la texture. :

Code : Tout sélectionner

public int IDtextures = 0; 
Start devient:

Code : Tout sélectionner

	void Start() 
    { 
		textures = Resources.LoadAll("Textures", typeof(Texture2D));  // On recup les textures dans le dossiers
		
		for (int i = 0; i < plans.Length; i++)  // On affecte une texture au hasard a chaque plan
		{ 
			plans[i].renderer.material.mainTexture = (Texture2D) textures[i];
			IDtextures =i;
		}
	}
et TextureChange devient:

Code : Tout sélectionner

    void TextureChange(Transform _planfin) 
	{
       if(IDtextures+1 > textures.Length){ IDtextures = 0}
	   else{ _planfin.renderer.material.mainTexture = (Texture2D) textures[IDtextures+1]; }
	}
voila..
Image

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

Re: Faire un slide show d'images

Message par kealkeal » 22 Déc 2010 18:14

J'ai mis le code en place mais il semblerait qu'il ya une erreure dasn la fonction : TextureChange :

Code : Tout sélectionner

void TextureChange(Transform _planfin) 
   {
       if(IDtextures+1 > textures.Length){ IDtextures = 0}
      else{ _planfin.renderer.material.mainTexture = (Texture2D) textures[IDtextures+1]; }
   }

Assets/Scripts/CoverflowCS.cs(63,58): error CS1525: Unexpected symbol `}', expecting `;'

(Filename: Assets/Scripts/CoverflowCS.cs Line: 63)

Assets/Scripts/CoverflowCS.cs(68,1): error CS8025: Parsing error

(Filename: Assets/Scripts/CoverflowCS.cs Line: 68)
J'ai tenté de faire des modifs mais sans succès.

Tu vois où est l'erreure ?
kealkeal

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Faire un slide show d'images

Message par Freelax » 22 Déc 2010 18:22

Sorry, j'ai codé a l'arrache ^^!

Code : Tout sélectionner

    void TextureChange(Transform _planfin) 
	{		
       if(IDtextures +1 >= textures.Length){ IDtextures = 0; _planfin.renderer.material.mainTexture = (Texture2D) textures[IDtextures];}
	   else{ IDtextures += 1; _planfin.renderer.material.mainTexture = (Texture2D) textures[IDtextures]; }
	}
Testé et approuvé ;)

tu as juste à ajouter les textures dans le dossier et c'est bon. :)
Image

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

Re: Faire un slide show d'images

Message par kealkeal » 22 Déc 2010 18:29

Merci beaucoup pour ton aide ! ;) Les textures se chargent bien de maniere aléatoire qu'une seule fois.

Je me demande quand je peux faire en sorte que le plan situé à droite et à gauche du plan central soit légérement tournés afin de donner plus de profondeur.

Histoire que ca ressemble plus à ceci : http://youtu.be/CzPAl1a_c0s

Il faudrait avoir la possibilité de faire tourner les plans légérement, tu vois ce que je veux dire ?

Merci.
kealkeal

Répondre

Revenir vers « Scripting »