Apparition/disparition d'objet

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Apparition/disparition d'objet

Message par Maxime00 » 20 Juin 2013 12:30

Bonjour à tous.

J'ai créé une scène avec un plateau et 5 cubes.
J'ai ensuite écrit un script qui permet de faire disparaitre différents cubes en fonction du bouton. Comme il n'y a pas eu de probleme (première fois you hou !) je viens demander si ma méhode est bonne et si elle est viable pour des projets un peu plus conséquents (à base de 500 cube à faire disparaitre en meme temps par exemple)

Voici le script, si vous lui trouvez des défauts merci de m'en faire part ^^

Code : Tout sélectionner

#pragma strict

var cubes : GameObject;
var cube1 : GameObject;
var cube2 : GameObject;
var cube3 : GameObject;
var cube4 : GameObject;
var cube5 : GameObject;

function Start(){
	cubes = GameObject.Find("cubes");
	cube1 = GameObject.Find("objet1");
	cube2 = GameObject.Find("objet2");
	cube3 = GameObject.Find("objet3");
	cube4 = GameObject.Find("objet4");
	cube5 = GameObject.Find("objet5");
}

function OnGUI () {
	if (GUI.Button(Rect(580,360,50,30),"ALL"))
		activeAll(cubes);
	if (GUI.Button(Rect(100,360,50,30),"Cube1"))
		activeAll(cube1);
	if (GUI.Button(Rect(180,360,50,30),"Cube2"))
		activeAll(cube2);
	if (GUI.Button(Rect(260,360,50,30),"Cube3"))
		activeAll(cube3);
	if (GUI.Button(Rect(340,360,50,30),"Cube4"))
		activeAll(cube4);
	if (GUI.Button(Rect(420,360,50,30),"Cube5"))
		activeAll(cube5);
	if (GUI.Button(Rect(500,360,50,30),"RAZ")){
		cubes.SetActive(true);
		cube1.SetActive(true);
		cube2.SetActive(true);
		cube3.SetActive(true);
		cube4.SetActive(true);
		cube5.SetActive(true);
	}   	
}
    
function activeAll (objet : GameObject){
	cubes.SetActive(true);
	cube1.SetActive(true);
	cube2.SetActive(true);
	cube3.SetActive(true);
	cube4.SetActive(true);
	cube5.SetActive(true);
	objet.SetActive(false);
}

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Apparition/disparition d'objet

Message par artemisart » 20 Juin 2013 13:27

Maxime00 a écrit :J'ai créé une scène avec un plateau et 5 cubes.
J'ai ensuite écrit un script qui permet de faire disparaitre différents cubes en fonction du bouton. Comme il n'y a pas eu de probleme (première fois you hou !) je viens demander si ma méhode est bonne et si elle est viable pour des projets un peu plus conséquents (à base de 500 cube à faire disparaitre en meme temps par exemple)
Il faut que tu apprenne l'utilisation des tableau (ou sinon tu mets un script sur chaque cube), parce que la ton code est pas du tout flexible (sur le nombre de cube et les GO.Find (...) à éviter absolument).
Tuto sur les tableaux : http://www.siteduzero.com/informatique/ ... ableaux-22 (applicable au js mais tu peux en trouver d'autres avec un moteur de recherche).

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Apparition/disparition d'objet

Message par Maxime00 » 21 Juin 2013 09:20

Alors la tu me pose une colle.
Je vois comment créer un tableau d'objet qui serait instancié durant la partie, mais comment faire pour créer un tableau réunissant certain objets de la scène sans aller les chercher avec un GO.Find ?

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Apparition/disparition d'objet

Message par artemisart » 21 Juin 2013 09:34

var tonTableau : GameObject[];
Tu le remplit dans l'inspector.

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Apparition/disparition d'objet

Message par Maxime00 » 21 Juin 2013 09:50

ah ouai...
ok, merci bien

EDIT :

voici le programme modifié :

Code : Tout sélectionner

#pragma strict

var cubes : GameObject;
var tableauCube : GameObject[];
var tailleTableau : short;
var i : short;
var j : short;

function Start(){
	tailleTableau = tableauCube.Length;
}

function OnGUI () {
	
	
	if (GUI.Button(Rect(30,320,50,30),"RAZ")){
		for (i=0; i<tailleTableau; i++)
			tableauCube[i].SetActive(true);
		cubes.SetActive(true);
	}
	if (GUI.Button(Rect(90,320,50,30),"ALL"))
		cubes.SetActive(false);  
		
	for (j=0; j<tailleTableau; j++){
		if (GUI.Button(Rect(60*j+150,320,50,30),"Cube"+(j+1)))
			activeAll(j);
	}
		
}
    
function activeAll (valeur : short){
	for (i=0; i<tailleTableau; i++)
		tableauCube[i].SetActive(true);
	cubes.SetActive(true);
	tableauCube[valeur].SetActive(false);
}
Je vais rajouter un if afin que le nombre de boutons ne puisse pas être supérieur à un certain nombre afin qu'ils ne sortent pas de l'écran.
Par contre après avoir créé mon tableau, j'ai du indiquer la taille et glisser tout mes objets à la main. La il n'y en avait que 8 donc ça passe, mais dans le cas d'un très grand nombre d'objets il existe une méthode plus efficace ?

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Apparition/disparition d'objet

Message par Maxime00 » 21 Juin 2013 10:35

bon apparement editer le message n'up pas le sujet donc...
up :oops:

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Apparition/disparition d'objet

Message par artemisart » 21 Juin 2013 11:03

Pourquoi utiliser des short ?
Tu peux très bien avoir plus de 32767 valeurs, + la variable tailleTableau est inutile, pareil pour i et j (et le cast implicite int > short est assez moche).
Si tous tes objets sont enfants du go "Cubes", tu peux utiliser la propriété childCount et la méthode GetChild (int), exemple :

Code : Tout sélectionner

#pragma strict

var cubes : Transform;

function OnGUI ()
{
	if (GUI.Button (Rect (30, 320, 50, 30), "RAZ"))
	{
		for (var i : int = 0; i < cubes.childCount; i++)
			cubes.GetChild (i).gameObject.SetActive (true);
	}
	
	if (GUI.Button (Rect (90, 320, 50, 30), "ALL"))
		ActiveChild (-1);
	
	for (var j : int = 0; j < cubes.childCount; j++){
		if (GUI.Button (Rect (60 * j + 150, 320, 50, 30), "Cube" + (j + 1)))
			ActiveChild (j);
	}
}
   
function ActiveChild (index : int)
{
	for (var i : int = 0; i < cubes.childCount; i++)
		cubes.GetChild (i).gameObject.SetActive (i != index);
}

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Apparition/disparition d'objet

Message par Maxime00 » 21 Juin 2013 11:36

c'était un programme d'entrainement mais à terme le but est de simuler les différentes étapes d'une scène (construction d'un pont par exemple) donc le tableau ne contient que des empty pères qu'ont va devoir faire disparaître par bloc entier. Merci pour ton aide en tout cas, ça m'as bien aidé ^^ (surtout pour la flexibilité de modification, bien mieux maintenant)

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Apparition/disparition d'objet

Message par Maxime00 » 21 Juin 2013 11:45

non rien...

Répondre

Revenir vers « Scripting »