diff --git a/RequireInterface.meta b/RequireInterface.meta
new file mode 100644
index 0000000..f1a1fa6
--- /dev/null
+++ b/RequireInterface.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: da80835a1611a5e4d908f51f09e8d3bc
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/RequireInterface/Editor.meta b/RequireInterface/Editor.meta
new file mode 100644
index 0000000..89239d9
--- /dev/null
+++ b/RequireInterface/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 849242dbc213969488426f85222a43a9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/RequireInterface/Editor/RequireInterfaceDrawer.cs b/RequireInterface/Editor/RequireInterfaceDrawer.cs
new file mode 100644
index 0000000..dfdd4f2
--- /dev/null
+++ b/RequireInterface/Editor/RequireInterfaceDrawer.cs
@@ -0,0 +1,41 @@
+using UnityEngine;
+using UnityEditor;
+///
+/// Drawer for the RequireInterface attribute.
+///
+[CustomPropertyDrawer(typeof(RequireInterfaceAttribute))]
+public class RequireInterfaceDrawer : PropertyDrawer
+{
+ ///
+ /// Overrides GUI drawing for the attribute.
+ ///
+ /// Position.
+ /// Property.
+ /// Label.
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ // Check if this is reference type property.
+ if (property.propertyType == SerializedPropertyType.ObjectReference)
+ {
+ // Get attribute parameters.
+ var requiredAttribute = this.attribute as RequireInterfaceAttribute;
+ // Begin drawing property field.
+ EditorGUI.BeginProperty(position, label, property);
+ // Draw property field.
+ property.objectReferenceValue = EditorGUI.ObjectField(position, label, property.objectReferenceValue, requiredAttribute.requiredType, true);
+ // Finish drawing property field.
+ EditorGUI.EndProperty();
+ }
+ else
+ {
+ // If field is not reference, show error message.
+ // Save previous color and change GUI to red.
+ var previousColor = GUI.color;
+ GUI.color = Color.red;
+ // Display label with error message.
+ EditorGUI.LabelField(position, label, new GUIContent("Property is not a reference type"));
+ // Revert color change.
+ GUI.color = previousColor;
+ }
+ }
+}
\ No newline at end of file
diff --git a/RequireInterface/Editor/RequireInterfaceDrawer.cs.meta b/RequireInterface/Editor/RequireInterfaceDrawer.cs.meta
new file mode 100644
index 0000000..9c4855e
--- /dev/null
+++ b/RequireInterface/Editor/RequireInterfaceDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b430a75a32f8e534f8661d364d842691
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/RequireInterfaceAttribute.cs b/RequireInterface/RequireInterfaceAttribute.cs
similarity index 100%
rename from RequireInterfaceAttribute.cs
rename to RequireInterface/RequireInterfaceAttribute.cs
diff --git a/RequireInterface/RequireInterfaceAttribute.cs.meta b/RequireInterface/RequireInterfaceAttribute.cs.meta
new file mode 100644
index 0000000..868885f
--- /dev/null
+++ b/RequireInterface/RequireInterfaceAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 29f2a6e637914fe4292225071a7c5157
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: