Bonjour, J'ai un soucis et j'ai besoins de votre aide !
J'ai réalisé un petit éditeur custom (WindowEditor) qui récupère un objet dans la scène par son nom et charge/modifie les valeurs de ses variables. Ça fonctionne très bien sauf que, lorsque je relance Unity, les variables du script attaché à l'objet sont reset. J'ai fais quelques tests : lorsque je modifie les valeurs directement dans l'inspector de l'objet la variable devient en gras et dans le panneau Hierarchy la scène a un * qui signifie qu'elle a besoins d'être sauvegardé. Lorsque je modifie une valeur au travers de mon éditeur, ça ne fait pas ça. J'ai pourtant essayé en faisant clic droit puis save sur la scène mais même avec ça les valeurs reviennent par défaut. L'objet instancié est un prefab je ne sais pas si ça peut venir de là... Quelques exemple de comment mon code est foutu (grossièrement) :
Le script attaché à l'objet ressemble à ça :
le script éditeur ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 using UnityEngine; using System.Collections; using System.Collections.Generic; public class ScriptAttachedToTheObject : MonoBehaviour { public bool variable; }
Une idée ? Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 using UnityEngine; using UnityEditor; using System.Collections.Generic; using System.Text.RegularExpressions; public class TheWindow: EditorWindow { public GameObject gameObject; public ScriptAttachedToTheObject scriptAttachedToTheObject ; [MenuItem("menublabla/blablabla")] private static void OpenWindow() { TheWindow window = GetWindow<TheWindow> (); window.titleContent = new GUIContent ("blablabla"); window.minSize = new Vector2 (900, 500); } private void OnGUI() { // Où je modifie les valeurs de la façon "scriptAttachedToTheObject.variable = xx; } private void OnEnable() { gameObject = GameObject.Find ("TheObject").gameObject; scriptAttachedToTheObject = gameObject .GetComponent<ScriptAttachedToTheObject >(); } }
Partager