Getting a target's gameobject in custom editor

Hi’ I’ve got these classes:

A component MyClass

public MyClass : Monobehaviour
{
	public Vector3[] positionList;
	private MyData = null;
	
	void OnEnable()
	{
		if (MyData == null)
			MyData = new MyData(this);
	}
}

And a class for its data:

[System.Serializable]
public MyData
{
	private int intData = 0;
	
	private MyClass ownerClass = null;
	
	public MyData(MyClass myClass)
	{
		ownerClass = myClass;
	}
	
	public int IntData
	{
		get{return intData;}
		set
		{
			intData = value;
			gameObject.transform.position = GetPosition(value);
		}
	}
	
	private Vector3 GetWorldPosition(int value)
	{
		return ownerClass.positionList[value];
	}
}

And an editor class:
[CustomEditor(typeof(MyClass))]
public class MyClassEditor : Editor
{
private SerializedObject myClassSO;
private MyClass myClass;

	void OnEnable () {
		myClassSO = new SerializedObject(target);
		myClass = (MyClass)target;
	}
	
	public override void OnInspectorGUI()
	{
		myClassSO.Update();
		
		base.OnInspectorGUI();
			
		 myClass.MyData.IntData = EditorGUILayout.IntField("Position type: ",  myClass.MyData.IntData);
		
		if(GUI.changed){
			EditorUtility.SetDirty(target);
			EditorUtility.SetDirty(myClass);
		}
		
		myClassSO.ApplyModifiedProperties();
	}
}

It’s just a simplification of the real class. But what I wanted to do is to have a custom editor that will change a data by using a property of the variable. In its property, I wanted to also change the transform.position of the gameObject, that’s why I also set the value of the MyClass object that has / owns this data in the constructor of MyData. This code works when I pressed play. I can change the value of MyData.IntData and the transform.position of the gameObject just fine. However, in the editor mode, it didn’t work because the ownerClass instance is null. Unfortunately, I also need it in the editor so I can change it without having to press play to see the result. So how do I do it?

Thanks in advance.

Hey,

This seems to be an old post but you can get the gameObject of the target by casting it as the class first.

[CustomEditor(typeof(MyClass))]
public class MyClassEditor : UnityEditor.Editor
{
    private MyClass myClass;

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        myClass = target as MyClass;

        GameObject go = myClass.gameObject; // YAY!
    }
}