Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice

Custom editor won´t save (Solved)

Discussion in 'Scripting' started by Andreas88, Mar 19, 2017.

  1. Andreas88

    Andreas88

    Joined:
    Dec 22, 2015
    Posts:
    67
    Hi there, i have been working on a custom editor for the last month. it´s almost done but i have noticed a big issue. i have a few objectfields that i should be able to fill with different gameobjets, so far it works in the scene and when playing the game. however, if i turn the gameobject that contains the Editor script into a prefab. all the objectfields that contains scene objects becomes null, but the objectfields that contains prefabs still has their gameobjects attached. Also to avoid confusion, the problem only happens inside the asset folder and not in the scene. i am still learning about how to write custom editors so it´s probably an noob mistake :)

    Managerscript:
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using UnityEngine.UI;
    4. using System.Collections.Generic;
    5. using System.Linq;
    6.  
    7. [SerializeField]
    8. public class Missionmanager : MonoBehaviour {
    9.  
    10.     public GameObject Mission_UI,Placement,Pickups,SpecialUnit,RewardPanel;
    11.     public RectTransform UIText,unitsUI,BuildingUI,SearchUI,KillUI,EscortUI,ReachUI;
    12.     public GameObject UICTRL;
    13.     public int curMission;
    14.     public bool Build, Search, Kill, Reach, Escort, Random;
    -------------------------------------------------------------------------------------------------
    Editor script:
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using UnityEditor;
    4. using System.Collections.Generic;
    5.  
    6. [System.Serializable]
    7. [CustomEditor(typeof(Missionmanager))]
    8. public class MissionCustomEditor : Editor
    9. {
    10.     Missionmanager MissionMan;
    11.     bool foldout1,foldout2,foldout3,foldout4,foldout5 = true;
    12.     bool reward1,reward2,reward3,reward4 = true;
    13.     bool unitreward1,unitreward2,unitreward3,unitreward4 = true;
    14.     bool TriggerMission_1,TriggerMission_2,TriggerMission_3,TriggerMission_4,TriggerMission_5 = true;
    15.     bool unitsfoldout,Buildfoldout = true;
    16.     int size ;
    17.     int numb;
    18.     public GameObject obj;
    19.     int totalBuild;
    20.     int Lock ;
    21.  
    22.     void OnEnable()
    23.     {
    24.         //initialization of mission variables
    25.         MissionMan = (Missionmanager)target;
    26.  
    27.  
    28.  
    29.     }
    30.  
    31.     public override void OnInspectorGUI()
    32.     {
    33.        
    34.         serializedObject.Update ();
    35.  
    36.  
    37.         Debug.Log (Lock);
    38.  
    39.        
    40.         //buttons for enabling desired missions.
    41.         EditorGUILayout.LabelField ("Enable Mission options:");
    42.  
    43.         MissionMan.Random = EditorGUILayout.Toggle ("Random misions",MissionMan.Random);
    44.         GUILayout.Space (5);
    45.  
    46.         MissionMan.Build = EditorGUILayout.Toggle ("Build units/Buildings",MissionMan.Build);
    47.         MissionMan.Search = EditorGUILayout.Toggle ("Search Areas",MissionMan.Search);
    48.         MissionMan.Kill = EditorGUILayout.Toggle ("Kill X units",MissionMan.Kill);
    49.         MissionMan.Escort = EditorGUILayout.Toggle ("Escort units",MissionMan.Escort);
    50.         MissionMan.Reach = EditorGUILayout.Toggle ("Reach before time",MissionMan.Reach);
    51.  
    52.        
    53.  
    54.         GUILayout.Space (20);
    55.  
    56.         MissionMan.Mission_UI = (GameObject)EditorGUILayout.ObjectField ("Mission_Panel",MissionMan.Mission_UI, typeof(GameObject), true);
    57.         MissionMan.RewardPanel = (GameObject)EditorGUILayout.ObjectField ("RewardPanel",MissionMan.RewardPanel, typeof(GameObject), true);
    58.         MissionMan.Placement = (GameObject)EditorGUILayout.ObjectField ("Placement",MissionMan.Placement, typeof(GameObject), true);
    59.         MissionMan.UIText = (RectTransform)EditorGUILayout.ObjectField ("UIText",MissionMan.UIText, typeof(RectTransform), true);
    60.         MissionMan.UICTRL = (GameObject)EditorGUILayout.ObjectField ("UICTRL",MissionMan.UICTRL, typeof(GameObject), true);
    61.         MissionMan.Pickups = (GameObject)EditorGUILayout.ObjectField ("Pickups",MissionMan.Pickups, typeof(GameObject), true);
    62.  
    63.  
    64.         MissionMan.unitsUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.unitsUI, typeof(RectTransform), true);
    65.         MissionMan.BuildingUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.BuildingUI, typeof(RectTransform), true);
    66.         MissionMan.SearchUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.SearchUI, typeof(RectTransform), true);
    67.         MissionMan.KillUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.KillUI, typeof(RectTransform), true);
    68.         MissionMan.ReachUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.ReachUI, typeof(RectTransform), true);
    69.         MissionMan.EscortUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.EscortUI, typeof(RectTransform), true);
    70.  
    71.  
    72.     //    base.OnInspectorGUI ();
    73.  
    74.         if(GUI.changed)
    75.         {
    76.             EditorUtility.SetDirty (target);
    77.  
    78.             serializedObject.ApplyModifiedProperties ();
    79.  
    80.         }
    i have cutted a few parts of my scripts because they are quite large and no reason to read all
    2000 lines of code lol. hope someone clever can help me out :)
     
  2. Andreas88

    Andreas88

    Joined:
    Dec 22, 2015
    Posts:
    67
    hey, problem solved...
     
  3. Hakumaker

    Hakumaker

    Joined:
    Aug 9, 2018
    Posts:
    2
    Hi i am happy you solved your issue , but how did you do that any tip ?
     
  4. Andreas88

    Andreas88

    Joined:
    Dec 22, 2015
    Posts:
    67
    Hi, if i remember correctly the issue is that for some reason you can´t have a custom editor with gameobjects as a prefab inside the Asset folder. A workaround for me was to look for the specific gameobjects in the awake method or start method, and then assign them to the fields i needed.

    if you need to add specific gameobjects to your custom editor i suggest adding them in the scene instead of inside the asset folder. hope this make sense :)