属性不是属性类

时间:2016-01-11 18:36:44

标签: c# unity3d

我有以下三个类:

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)

我可以做什么来将该属性附加到一个类?与AddComponentMenuDisallowMultipleComponent等相似......

Unity示例1

DisallowMultipleComponent

的Unity示例
[DisallowMultipleComponent]
class MyClass : MonoBehaviour {}

当您尝试将两个相同类型的组件(MyClass)添加到GameObject时,会打开一个窗口,说明您无法执行此操作。

Unity示例2

RequireComponent

的Unity示例
[RequireComponent(typeof(Rigidbody))]
class MyClass : MonoBehaviour {}

使用此示例,当您将MyClass作为组件添加到GameObject时,如果它不在游戏对象上,则会添加Rigidbody组件。

我想要实现的目标

我想要做的是创建一个名为SingletonSingletonAttribute的属性,当用户添加具有该属性的组件时,它将查看游戏场景,如果已经是组件则不添加组件在场景中。

[Singleton(typeof(MyClass))]
class MyClass : MonoBehaviour {}

1 个答案:

答案 0 :(得分:3)

您的自定义属性类必须从System.Attribute继承。

https://msdn.microsoft.com/en-us/library/sw480ze8.aspx

  

您可以通过定义属性来创建自己的自定义属性   class,直接或间接从Attribute

派生的类