Bon je viens vers vous pour surement un problème tout bête mais que je n'arrive pas a résoudre.
Le topo :
Je suis en train d'explorer les cripts EDITOR donc qui fonctionnent sans mettre le jeux en play. c'est pour faire un éditeur de niveau ( Pour un des projet de EmileF et par la même me remttre sur Mon mouton un peu con.
Je suis donc partis d'un projet vierge, créé un script EDITOR :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
[CustomEditor(typeof(Editeur))]
public class MainEditeur : Editor
{
Editeur main;
private void OnEnable()
{
main = ((Editeur)target).GetComponent<Editeur>();
Tools.hidden = true;
}
private void OnDisable()
{
Tools.hidden = false;
}
void OnSceneGUI()
{
Handles.BeginGUI();
if (GUI.Button(new Rect(10, 30, 120, 18), "reset"))
{
main.test1 = new Editeur.TEST[100];
}
Handles.EndGUI();
Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
Handles.color = Color.green;
int PosX = Mathf.RoundToInt(hit.point.x);
int PosY = Mathf.RoundToInt(hit.point.y);
int PosZ = Mathf.RoundToInt(hit.point.z);
Vector3 Pos = new Vector3(PosX, PosY, PosZ);
Handles.RectangleHandleCap(0, Pos, Quaternion.LookRotation(Vector3.up), 0.5f, EventType.Repaint);
if (Handles.Button(hit.point, Quaternion.LookRotation(Vector3.up), 0.0f, 0.0f, Handles.RectangleHandleCap))
{
main.test1[PosX + PosZ * 10].ok = !main.test1[PosX + PosZ * 10].ok;
}
}
Handles.color = Color.red;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (main.test1[i + j * 10].ok == true)
{
Handles.DrawLine(new Vector3(i, 0, j), new Vector3(i, 0, j)+ Vector3.up * 2);
}
}
}
}
}
Code : Tout sélectionner
using UnityEngine;
using System;
public class Editeur : MonoBehaviour
{
[Serializable]
public struct TEST
{
public bool ok;
public int essai;
}
[SerializeField]
public TEST[] test1;
private void Start()
{
Debug.Log(test1.Length);
}
}
Dans l'inspecteur, le valeur sont bien modifiées, je debug même un drawRay dans la scène pour vérifier.
Mais si je sauvegarde la scène et quitte Unity , à l'ouverture mes valeur modifiées ne sont pas conservées. Il faut que j'en modifie une manuellement dans l'inspecteur pour que toutes soient sauvegardées ce qui est pas forcément pratique.
Ma question est : ou est-ce que je fait de travers?
J'ai fait package pour ceux qui voudront tester (une scene et deux scripts)
D'avance merci si quelqu'un me trouve la solution