[DB-AL] Sérialisation d'un CustomEditor
Publié : 16 Août 2019 17:47
Salut la compagnie
dernièrement je me suis attaqué à un script afin qu'il propose des conditions multiple.
En clair, j'ai créé une sorte de déroulant appelé "Condition Type" et lorsque je clique sur le type de condition que je veux. Cela rajoute des variables (comme dans les image ci-dessous) grâce à la méthode CustomEditor.
. . . .
Maintenant ma question c'est comment faire pour que je puisse sérialiser tout ça ?
Car actuellement c'est UNE seule condition, mais si jamais je voulais en mettre plusieurs. Comment procéder ?
Je vous laisse également les scripts afin que vous puissiez avoir tout les éléments.
.
Le script du jeu :
.
Et l'Editor :
Après, je pense que l'on peut passer par la POO, mais j'ai un peu de mal avec ça (d'où ma présence )
Je repose donc sur vous.
Merci d'avance pour vos réponses.
dernièrement je me suis attaqué à un script afin qu'il propose des conditions multiple.
En clair, j'ai créé une sorte de déroulant appelé "Condition Type" et lorsque je clique sur le type de condition que je veux. Cela rajoute des variables (comme dans les image ci-dessous) grâce à la méthode CustomEditor.
. . . .
Maintenant ma question c'est comment faire pour que je puisse sérialiser tout ça ?
Car actuellement c'est UNE seule condition, mais si jamais je voulais en mettre plusieurs. Comment procéder ?
Je vous laisse également les scripts afin que vous puissiez avoir tout les éléments.
.
Le script du jeu :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
public class Conditions : MonoBehaviour
{
public enum ConditionsType
{
None, KillerCounter, Destination, MoneyCounter, InventoryObjects, Dialog
}
public string Description;
public ConditionsType ConditionsT = ConditionsType.None;
//KillerCounter
[Header("Killer Counter")]
public string EnnemiName;
public int EnnemiKills;
//Destination
[Header("Destination")]
public string Destination;
//MoneyCounter
[Header("Money Counter")]
public int CheckedMoney;
//InventoryObjects
[Header("Inventory Objects")]
public string ObjectName;
public int ObjectCount;
//Dialog
[Header("Dialog")]
public Text DialogWindows;
public string DialogCondition;
}
Et l'Editor :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEngine.UI;
[CustomEditor(typeof(Conditions))]
public class ConditionsEditor : Editor
{
public override void OnInspectorGUI()
{
Conditions ConditionsScript = (Conditions)target;
ConditionsScript.Description = EditorGUILayout.TextField("Description", ConditionsScript.Description);
ConditionsScript.ConditionsT = (Conditions.ConditionsType)EditorGUILayout.EnumPopup("Condition Type", ConditionsScript.ConditionsT);
//Si le type est KillerCounter
if (ConditionsScript.ConditionsT == Conditions.ConditionsType.KillerCounter)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("KILLER COUNTER", EditorStyles.boldLabel);
//Affichage des variables
ConditionsScript.EnnemiName = EditorGUILayout.TextField("Ennemi Name", ConditionsScript.EnnemiName);
ConditionsScript.EnnemiKills = EditorGUILayout.IntField("Ennemi Kills", ConditionsScript.EnnemiKills);
}
//Si le type est Destination
if (ConditionsScript.ConditionsT == Conditions.ConditionsType.Destination)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("DESTINATION", EditorStyles.boldLabel);
//Affichage de la variable
ConditionsScript.Destination = EditorGUILayout.TextField("Destination", ConditionsScript.Destination);
}
//Si le type est MoneyCounter
if (ConditionsScript.ConditionsT == Conditions.ConditionsType.MoneyCounter)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("MONEY COUNTER", EditorStyles.boldLabel);
//Affichage de la variable
ConditionsScript.CheckedMoney = EditorGUILayout.IntField("Checked Money", ConditionsScript.CheckedMoney);
}
//Si le type est InventoryObjects
if (ConditionsScript.ConditionsT == Conditions.ConditionsType.InventoryObjects)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("INVENTORY OBJECTS", EditorStyles.boldLabel);
//Affichage des variables
ConditionsScript.ObjectName = EditorGUILayout.TextField("Object Name", ConditionsScript.ObjectName);
ConditionsScript.ObjectCount = EditorGUILayout.IntField("Object Count", ConditionsScript.ObjectCount);
}
//Si le type est Dialog
if (ConditionsScript.ConditionsT == Conditions.ConditionsType.Dialog)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("DIALOG", EditorStyles.boldLabel);
//Affichage de la variable
ConditionsScript.DialogCondition = EditorGUILayout.TextField("Dialog Condition", ConditionsScript.DialogCondition);
}
}
}
Je repose donc sur vous.
Merci d'avance pour vos réponses.