- Home /
Calling a method on a serialized property (Custom Editor with Reorderable List)
I am trying to create a tool that spawns maps randomly on given propabilities for tile neighbors. Therefore I have written classes for a Tile and a Propability:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Tile
{
public string description;
public Sprite sprite;
public List<Propabilities> propabilities;
public void AddPropability(Tile neighbor)
{
propabilities.Add(new Propabilities(neighbor));
}
public void RemovePropability(Tile neighbor)
{
propabilities.Remove(propabilities.Find(x => x.neighbor == neighbor));
}
}
[System.Serializable]
public class Propabilities
{
public Tile neighbor;
public float propability;
public Propabilities(Tile neighbor_)
{
neighbor = neighbor_;
propability = 0;
}
}
The MonoBehavior Class 'MapManager' currently only contains a List of Tiles. I have written a Custom Editor for the MapManager and for the Tile class using Reorderable Lists for the List of Tiles and the List of Propabilities in each Tile. Therefore I read into a lot of examples using Serialized Objects and Properties which still tend to confuse me, however I got along quite well until this point. I now have to update each Tile's List of propabilities every time a new Tile is added to the Editor. I tried to use casts, which do work on Sprites for example:
SerializedProperty sprite = element.FindPropertyRelative("sprite");
EditorGUI.PropertyField(
new Rect(rect.x, rect.y + EditorGUIUtility.singleLineHeight + 2 * gap, headerWidth, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("sprite"), GUIContent.none);
if (sprite != null && sprite.objectReferenceValue != null)
{
EditorGUI.DrawPreviewTexture(new Rect(rect.x, rect.y + 2 * EditorGUIUtility.singleLineHeight + 3 * gap, headerWidth, headerWidth),
(sprite.objectReferenceValue as Sprite).texture);
}
However, this doesn't seem to work on own classes. How do I get access to the Methods in my class?
I'm still not sure if I completely understand what I'm doing here, so if there's a more simple approach to what I'm trying to do, I'm open for ideas.
Any help would be much appreciated. Thanks :)