我有以下三个类:
SingletonDrawer.cs:
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(SingletonAttribute))]
public class SingletonDrawer : PropertyDrawer{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
}
}
SingletonAttribute.cs:
using UnityEditor;
#if UNITY_EDITOR
[System.SerializableAttribute]
public class SingletonAttribute : PropertyDrawer {
public System.Type type;
public SingletonAttribute(System.Type type){
this.type = type;
}
}
#endif
TimeTravel.cs:
using UnityEngine;
namespace Simple.TimeTravel {
[SingletonAttribute(typeof(TimeTravelController))]
public abstract class TimeTravelController : MonoBehaviour {
}
}
在我的TimeTravel
类中,我正在尝试添加SingletonAttribute
属性,但是我收到以下错误:
'SingletonAttribute'不是属性类[Assembly-CSharp] SingletonAttribute.SingletonAttribute(Type type)
我可以做什么来将该属性附加到一个类?与AddComponentMenu
,DisallowMultipleComponent
等相似......
DisallowMultipleComponent
[DisallowMultipleComponent]
class MyClass : MonoBehaviour {}
当您尝试将两个相同类型的组件(MyClass
)添加到GameObject时,会打开一个窗口,说明您无法执行此操作。
RequireComponent
[RequireComponent(typeof(Rigidbody))]
class MyClass : MonoBehaviour {}
使用此示例,当您将MyClass
作为组件添加到GameObject时,如果它不在游戏对象上,则会添加Rigidbody
组件。
我想要做的是创建一个名为Singleton
或SingletonAttribute
的属性,当用户添加具有该属性的组件时,它将查看游戏场景,如果已经是组件则不添加组件在场景中。
[Singleton(typeof(MyClass))]
class MyClass : MonoBehaviour {}
答案 0 :(得分:3)
您的自定义属性类必须从System.Attribute继承。
https://msdn.microsoft.com/en-us/library/sw480ze8.aspx
您可以通过定义属性来创建自己的自定义属性 class,直接或间接从Attribute
派生的类