Optimisation

Questions à propos du GUI, y compris la partie script.
UnityNoob
Messages : 1
Inscription : 15 Jan 2013 11:21

Optimisation

Message par UnityNoob » 15 Jan 2013 11:55

Salut à tous !

Petit nouveau sur le forum, mais aussi sur Unity :D
Je commence à peine sur ce magnifique moteur et n'étant pas codeur à la base j'avoue avoir un peu de mal sur cette partie. Mais je m'accroche ! Enfin bref, voici ma question :

J'ai bidouillé un petit script qui affiche trois boutons. Chaque bouton masque des objets, en affiche un autre et change la couleur d'un cube principal. Mais ça fait une sacré couche de code pour des choses qui sont finalement répétitives. Est-ce que vous pouvez me conseiller une méthode pour raccourcir tout ça ? J'ai déjà vu sur le forum que ça parlait de création de tableau mais c'était trop technique pour moi et c'était un dialogue entre "initiés" ce qui est dur de comprendre ce qui se passe quand on ne comprend pas :shock:

Voici mon code :

Code : Tout sélectionner

var _btnSize : Vector2 = new Vector2 (  150  ,  20  ) ;

var _cube : GameObject ;

var _choice01BtnPos : Vector2  = new Vector2 (  0,  0  ) ;
var _choice02BtnPos : Vector2  = new Vector2 (  0,  0  ) ;
var _choice03BtnPos : Vector2  = new Vector2 (  0,  0  ) ;

var _object1 : GameObject ;
var _object2 : GameObject ;
var _object3 : GameObject ;

var _couleur1 : Color = Color ( 0.2 , 0.3 , 0.4 ,  0.5 ) ;
var _couleur2 : Color = Color ( 0.2 , 0.3 , 0.4 , 0.5 ) ;
var _couleur3 : Color = Color ( 0.2 , 0.3 , 0.4 , 0.5 ) ;

private var _choice01BtnBox : Rect ;
private var _choice02BtnBox : Rect ;
private var _choice03BtnBox : Rect ;

function Start () {
	ResetMetrics() ;
	Choix1() ;
}

function ResetMetrics() {
	_choice01BtnBox = Rect (  _choice01BtnPos.x  ,  _choice01BtnPos.y  ,  _btnSize.x  , _btnSize.y ) ;
	_choice02BtnBox = Rect (  _choice02BtnPos.x  ,  _choice02BtnPos.y  ,  _btnSize.x  , _btnSize.y ) ;
	_choice03BtnBox = Rect (  _choice03BtnPos.x  ,  _choice03BtnPos.y  ,  _btnSize.x  , _btnSize.y ) ;
}


function Update () {
	ResetMetrics() ;
}

function OnGUI () {
		if  (  GUI.Button (  _choice01BtnBox , "Choix 1"  ) ) {
		Choix1() ;
		_cube.renderer.material.color = _couleur1;	
	}
	if  (  GUI.Button (  _choice02BtnBox , "Choix 2"  ) ) {
		Choix2() ;
		_cube.renderer.material.color = _couleur2;
	}
	if  (  GUI.Button (  _choice03BtnBox , "Choix 3"  ) ) {
		Choix3() ;
		_cube.renderer.material.color = _couleur3;
	}

}

function Choix1() {
	_object1.renderer.enabled  =  true ;
	_object2.renderer.enabled  =  false ;
	_object3.renderer.enabled  =  false ;
}

function Choix2() {
	_object1.renderer.enabled  =  false ;
	_object2.renderer.enabled  =  true ;
	_object3.renderer.enabled  =  false ;
}

function Choix3() {
	_object1.renderer.enabled  =  false ;
	_object2.renderer.enabled  =  false ;
	_object3.renderer.enabled  =  true ;
}
Je n'ai pas trouvé de tuto pour ça en UnityScript. Si vous avez des liens, je suis preneur aussi :D Merci !

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

Re: Optimisation

Message par cayou66 » 15 Jan 2013 14:47

Salut,
petite 1ere optimisation:

Code : Tout sélectionner

function OnGUI () {
      if  (  GUI.Button (  _choice01BtnBox , "Choix 1"  ) ) {
      Choix(true, false, false) ;
      _cube.renderer.material.color = _couleur1;   
   }
   if  (  GUI.Button (  _choice02BtnBox , "Choix 2"  ) ) {
      Choix(false, true, false) ;
      _cube.renderer.material.color = _couleur2;
   }
   if  (  GUI.Button (  _choice03BtnBox , "Choix 3"  ) ) {
      Choix(false, false, true) ;
      _cube.renderer.material.color = _couleur3;
   }

}

function Choix(bool one, bool two, bool three) {
   _object1.renderer.enabled  =  one;
   _object2.renderer.enabled  =  two;
   _object3.renderer.enabled  =  three;
}
Et sinon oui, tu peux utiliser un tableau et des loop, ce qui fait partie de la base de programmation, rien de compliqué donc.
Mais pour 3 lignes, tu risques d'écrire plus de lignes pour gérer les tableaux que ce que tu as là maintenant.
Ceci dit, si tu as par la suite 20 boutons en plus, ça coûtera pas une seule ligne de plus.

Il faudrait revoir en entier le code si tu veux faire ça propre à 100%.

Edit:
Mauvaise catégorie du post.

Répondre

Revenir vers « L'interface GUI »