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:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Linq;
[SerializeField]
public class Missionmanager : MonoBehaviour {
public GameObject Mission_UI,Placement,Pickups,SpecialUnit,RewardPanel;
public RectTransform UIText,unitsUI,BuildingUI,SearchUI,KillUI,EscortUI,ReachUI;
public GameObject UICTRL;
public int curMission;
public bool Build, Search, Kill, Reach, Escort, Random;
Editor script:
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Collections.Generic;
[System.Serializable]
[CustomEditor(typeof(Missionmanager))]
public class MissionCustomEditor : Editor
{
Missionmanager MissionMan;
bool foldout1,foldout2,foldout3,foldout4,foldout5 = true;
bool reward1,reward2,reward3,reward4 = true;
bool unitreward1,unitreward2,unitreward3,unitreward4 = true;
bool TriggerMission_1,TriggerMission_2,TriggerMission_3,TriggerMission_4,TriggerMission_5 = true;
bool unitsfoldout,Buildfoldout = true;
int size ;
int numb;
public GameObject obj;
int totalBuild;
int Lock ;
void OnEnable()
{
//initialization of mission variables
MissionMan = (Missionmanager)target;
}
public override void OnInspectorGUI()
{
serializedObject.Update ();
Debug.Log (Lock);
//buttons for enabling desired missions.
EditorGUILayout.LabelField ("Enable Mission options:");
MissionMan.Random = EditorGUILayout.Toggle ("Random misions",MissionMan.Random);
GUILayout.Space (5);
MissionMan.Build = EditorGUILayout.Toggle ("Build units/Buildings",MissionMan.Build);
MissionMan.Search = EditorGUILayout.Toggle ("Search Areas",MissionMan.Search);
MissionMan.Kill = EditorGUILayout.Toggle ("Kill X units",MissionMan.Kill);
MissionMan.Escort = EditorGUILayout.Toggle ("Escort units",MissionMan.Escort);
MissionMan.Reach = EditorGUILayout.Toggle ("Reach before time",MissionMan.Reach);
GUILayout.Space (20);
MissionMan.Mission_UI = (GameObject)EditorGUILayout.ObjectField ("Mission_Panel",MissionMan.Mission_UI, typeof(GameObject), true);
MissionMan.RewardPanel = (GameObject)EditorGUILayout.ObjectField ("RewardPanel",MissionMan.RewardPanel, typeof(GameObject), true);
MissionMan.Placement = (GameObject)EditorGUILayout.ObjectField ("Placement",MissionMan.Placement, typeof(GameObject), true);
MissionMan.UIText = (RectTransform)EditorGUILayout.ObjectField ("UIText",MissionMan.UIText, typeof(RectTransform), true);
MissionMan.UICTRL = (GameObject)EditorGUILayout.ObjectField ("UICTRL",MissionMan.UICTRL, typeof(GameObject), true);
MissionMan.Pickups = (GameObject)EditorGUILayout.ObjectField ("Pickups",MissionMan.Pickups, typeof(GameObject), true);
MissionMan.unitsUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.unitsUI, typeof(RectTransform), true);
MissionMan.BuildingUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.BuildingUI, typeof(RectTransform), true);
MissionMan.SearchUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.SearchUI, typeof(RectTransform), true);
MissionMan.KillUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.KillUI, typeof(RectTransform), true);
MissionMan.ReachUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.ReachUI, typeof(RectTransform), true);
MissionMan.EscortUI = (RectTransform)EditorGUILayout.ObjectField (MissionMan.EscortUI, typeof(RectTransform), true);
// base.OnInspectorGUI ();
if(GUI.changed)
{
EditorUtility.SetDirty (target);
serializedObject.ApplyModifiedProperties ();
}
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