- Home /
Custom Inspector: Accessing a reference to another MonoBehaviour?
Hello.
I have two Monobehaviours, one is a Path, the other a Path Follower. The Path Follower has a field for a Path that the user can drag and drop into the Path Follower's Custom Inspector.
In this Custom Inspector I want to be able to access data on the referenced Path Behaviour. Using serializedObject.FindProperty (), it successfully gets the reference to the path but when I try to then get the data from it, like the List of Way-Points, using say, Path.FindPropertyRelative (), everything returns null.
I am doing everything I should, to my knowledge, such as adding the SerializeFields, making sure everything is spelled correctly when finding the properties. Perhaps accessing a Monobehaviour from inside another is not possible?
Any help would be appreciated. Here's my simplified code:
Path:
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Path : MonoBehaviour
{
[SerializeField]
public List<WayPoint> WayPoints = new List<WayPoint>();
[System.Serializable]
public class WayPoint
{
[SerializeField]
public Vector2 Position = Vector2.zero;
}
}
Path Follower:
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class PathFollower : MonoBehaviour
{
[SerializeField]
protected Path _path;
}
Path Follower Inspector
using System.Collections.Generic;
using UnityEditor;
[CustomEditor(typeof (PathFollower))]
public class PathFollowerEditor : Editor
{
// Properties
SerializedProperty pathProp;
SerializedProperty wayPointsProp;
void GetProperties()
{
pathProp = serializedObject.FindProperty("_path");
wayPointsProp = pathProp.FindPropertyRelative("WayPoints");
}
void DrawInspector ()
{
EditorGUILayout.PropertyField(pathProp);
// If there is a Path, utilize the Way Points' data...
}
}
At this point, I don't even need to change data from the Path, just that the Path Follower knows what the data is.
-Thanks in advance.
Answer by hexagonius · Oct 20, 2018 at 09:35 AM
From all I could gather, checking out my own code using this and searching Answers finding this:
https://answers.unity.com/questions/629803/findrelativeproperty-never-worked-for-me-how-does.html
I came to the conclusion that FindPropertyRelative
is only meant to be used on System.Serializable
classes not deriving from either MonoBehaviour or ScriptableObject.
You'll find the answer of how to work with your case in the other answer.
Thanks so much! This saved me from so many headaches yesterday!
To clarify for anyone else, perhaps someone who learns visually, it would be like this, in my case at least:
pathSO = new SerializedObject(serializedObject.FindProperty("_path").objectReferenceValue);
wayPointsProp = pathSO.FindProperty("WayPoints");
Your answer
Follow this Question
Related Questions
Manually Open custom inspector for serializable object 0 Answers
Confused about custom GameObjects,Custom GameObject confusion 0 Answers
How can i get SerializedProperty from UnityEvent which in List. Sorry for my Eng. 2 Answers
What is a GUILayoutOption[] 3 Answers
myObjetc..GetType().GetCustomAttributes(typeof(RequireComponent) not working correctly 1 Answer