SerializeReferenceDropdown
(Unity) Editor dropdown for SerializeReference Attribute.
Requirements:
Unity 2019.3.0 and higher.
Recommends: Unity 2021.2.0a19 and above (works better with scenes and examples)
Why?
Serialization: Objects referenced from SerializeReference fields
now have stable ids, which reduces risk of conflicts when multiple
users collaborate on a scene file. This also improves support for undo
and prefabs, especially when SerializeReference is used inside arrays
and lists. There is a new format for references, with backward
compatibility support for older assets.
Serialization: SerializeReference now allow more granular handling of
missing types. SerializeReference instances for which the type is
missing will be replaced by null. Other instances will be editable and
if fields who were previously referring to the missing type are still
null the missing type will be preserved.
Installation:
- Select in UPM "Add package from git URL..."
- Install package with link.
https://github.com/AlexeyTaranov/SerializeReferenceDropdown.git
SerializeReferenceDropdown Example:
Code Example
```csharp
public class TestShapesForSRD : MonoBehaviour
{
[SerializeReferenceDropdown]
[SerializeReference]
private IShape _singleShape;
[SerializeReferenceDropdown]
[SerializeReference]
private IShape[] _shapesArray;
}
public interface IShape
{
}
[Serializable]
public class Circle : IShape
{
[SerializeField]
private float _radius;
}
[Serializable]
public class Rectangle : IShape
{
[SerializeField]
private float _sideA;
[SerializeField]
private float _sideB;
}
```
Generics
You can use generics (Unity 2023.2+). Unspecified arguments need select in additional window.
Code Example
```csharp
public class TestShapesForSRD : MonoBehaviour
{
[SerializeReference, SerializeReferenceDropdown]
private ISimpleGenericData _intData;
}
public interface ISimpleGenericData : IAbstractData
{
public TData Data { get; }
}
[Serializable]
public class GenericData : ISimpleGenericData
{
[SerializeField] private TData _data;
public TData Data => _data;
}
[Serializable]
public class GenericKeyValuePair : ISimpleGenericData, IAbstractData
{
[SerializeField] private TKeyData _key;
[SerializeField] private TValueData _value;
public TKeyData Data => _key;
}
```
Copy Paste context menu