属性不是属性类
本文关键字:属性 | 更新日期: 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(
我可以做些什么来将该属性附加到类?类似于AddComponentMenu
、DisallowMultipleComponent
等...
统一示例 1
DisallowMultipleComponent
的统一示例
[DisallowMultipleComponent]
class MyClass : MonoBehaviour {}
当您尝试将两个相同类型(MyClass
(的组件添加到游戏对象时,将打开一个窗口,指出您无法执行此操作。
统一示例 2
RequireComponent
的统一示例
[RequireComponent(typeof(Rigidbody))]
class MyClass : MonoBehaviour {}
在此示例中,当您将MyClass
作为组件添加到游戏对象时,Unity 将添加Rigidbody
组件(如果该组件尚未在游戏对象上(。
我想要实现的目标
我想做的是创建一个名为 Singleton
或 SingletonAttribute
的属性,当用户添加具有该属性的组件时,它将查看游戏场景,如果组件已经在场景中,则不会添加组件。
[Singleton(typeof(MyClass))]
class MyClass : MonoBehaviour {}
自定义属性类必须继承自 System.Attribute。
https://msdn.microsoft.com/en-us/library/sw480ze8.aspx
您可以通过定义属性来创建自己的自定义属性 类,直接或间接派生自属性的类