RESOLU [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

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
Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

RESOLU [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par Axel74 » 27 Avr 2017 08:59

Hello tout le monde !

J'utilise un custom inspector en multiple edit ( [CanEditMultipleObjects] ). Tout content d'avoir à peu près fini la "mise en page" et la fonctionnalité de l'inspector, je me rend compte que lorsqu'on sélectionne plusieurs objets ayant le même script et que je modifie une variable, celle ne se modifie que sur un seul des objets / script.

Connaissez vous un moyen pour que cela fonctionne ?

Voilà à quoi ressemble mon Editor :

Code : Tout sélectionner

[CanEditMultipleObjects]
[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor {

	MyScript target;

	public override void OnInspectorGUI ()
	{
		target= (target as MyScript).gameObject.GetComponent<MyScript> ();
		
		
		...
	
		if (GUI.changed) { EditorUtility.SetDirty (target); }
	}
Dernière édition par Axel74 le 27 Avr 2017 15:22, édité 1 fois.
Douille ou l'ail que pote étaux ? Yes I like.

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

Re: [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par boubouk50 » 27 Avr 2017 09:24

J'ai juste cherché un peu et suis tombé sur cet exemple:
http://answers.unity3d.com/questions/63 ... or-an.html
Il semble qu'il te faille une boucle pour chaque objets sélectionnés.
"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

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par Axel74 » 27 Avr 2017 14:45

J'étais déjà tombé sur cette publication mais j'ai du mal à digérer ce qu'il à écrit et (du coup) je n'arrive pas à le faire fonctionner.

J'ai trouvé une autre approche :

Code : Tout sélectionner

[CanEditMultipleObjects]
[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor {

	GameObject obj;
   	MyScript target;

	void OnEnable ()
	{
		obj = (GameObject)Selection.activeObjects;
    		target = (target as MyScript).gameObject.GetComponent<MyScript> ();
	}

   public override void OnInspectorGUI ()
   {
	if (GUILayout.Button ("Locked")) {

		foreach (var go in Selection.gameObjects) {
			target = go.GetComponent<MyScript> ();

			target .locked = false;
		}
	}
      
      
      ...
   
      if (GUI.changed) { EditorUtility.SetDirty (target); }
   }

Ça fonctionne nickel, mais est ce que ça demande pas un peu plus de calcul à lire le script le fait d'utiliser GetComponent ?
Douille ou l'ail que pote étaux ? Yes I like.

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

Re: [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par boubouk50 » 27 Avr 2017 15:04

Si c'est plus lourd, mais tu fais un script Editor, alors le frameRate tu t'en tapes un peu, non?
Et puis, bon c'est lourd mais c'est pas non plus ça qui te fera ramer la machine. :-D
"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

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re:RESOLU [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par Axel74 » 27 Avr 2017 15:22

En effet :-D Après tout j'utilise foreach uniquement quand je clique sur un bouton donc c'est vrai que ça gène pas trop. Merci pour ton aide boubouk !
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: RESOLU [MY-AL] Multi modification d'une variable utilisant un Custom Inspector

Message par Axel74 » 28 Avr 2017 05:00

Je reviens sur ce sujet car je me rend compte que lorsque j'ai un des ces objets héritant de ce custom inspector et que j'appui sur Play, il m'est impossible de jouer. L'écran de jeu se freeze comme si j'effectuais un Time.timescale = 0. Lorsque je le désélectionne ou que j'en sélectionne un n'ayant pas ce custom inspector, je peux de nouveau jouer.
J'ai essayé de "bloquer" la lecture du code en début de OnInspectorGUI comme ceci :

Code : Tout sélectionner

	
if (Application.isPlaying) 
	return;
Ca ne fait qu'empêcher de voir quoi que ce soit dans mon inspector mais le problème persiste. Si j'enlève le script editor et que je ne l'utilise plus ça fonctionne... Pas moyen de trouver une réponse proche de ce problème sur internet, pas d'erreur dans ma console non plus.

J'utilise un custom inspector également sur un script de mon joueur mais qui lui n'est pas autorisé à faire une multiple edition de script ( sans [CanEditMultipleObjects] ) et je n'ai pas ce problème. Y a t-il quelque chose que je manquerai ou en toute logique ça devrai fonctionner ?


edit : Problème trouvé et résolu, cela venait de mon check si l'inspector est verrouillé ou non :super:
Douille ou l'ail que pote étaux ? Yes I like.

Répondre

Revenir vers « (C#) CSharp »