Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by NosTurtle · Oct 20, 2018 at 08:38 AM · scripting problemeditoreditor-scriptingmonobehaviourcustom-inspector

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.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

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.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image NosTurtle · Oct 20, 2018 at 07:23 PM 0
Share

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

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

197 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges