属性不是属性类

本文关键字:属性 | 更新日期: 2023-09-27 18:29:55

我有以下三个类:

单身抽屉.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

时间旅行.cs:

using UnityEngine;
namespace Simple.TimeTravel {
    [SingletonAttribute(typeof(TimeTravelController))]
    public abstract class TimeTravelController : MonoBehaviour {
    }
}

在我的TimeTravel类中,我正在尝试添加SingletonAttribute属性,但是出现以下错误:

'SingletonAttribute

' 不是属性类 [Assembly-CSharp] SingletonAttribute.SingletonAttribute(Type type(

我可以做些什么来将该属性附加到类?类似于AddComponentMenuDisallowMultipleComponent等...

统一示例 1

DisallowMultipleComponent的统一示例

[DisallowMultipleComponent]
class MyClass : MonoBehaviour {}

当您尝试将两个相同类型(MyClass(的组件添加到游戏对象时,将打开一个窗口,指出您无法执行此操作。

统一示例 2

RequireComponent的统一示例

[RequireComponent(typeof(Rigidbody))]
class MyClass : MonoBehaviour {}

在此示例中,当您将MyClass作为组件添加到游戏对象时,Unity 将添加Rigidbody组件(如果该组件尚未在游戏对象上(。

我想要实现的目标

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

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

属性不是属性类

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

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

您可以通过定义属性来创建自己的自定义属性 类,直接或间接派生自属性的类