通用类C#Unity的自定义属性抽屉
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通用类C#Unity的自定义属性抽屉,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1795字,纯文字阅读大概需要3分钟。
内容图文
我在检查器中显示Serializable泛型类时遇到问题.
Serializable泛型类如下:
using UnityEngine;
using System;
using System.Collections;
[Serializable]
public class GenericClass<T> where T : struct
{
[SerializeField]
string _serializedString;
public string SerializedString
{
get { return _serializedString; }
set { _serializedString = value; }
}
... // Functions using the generic type
}
自定义属性抽屉如下:
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(GenericClass<>))]
public class GenericClassDrawer: PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
SerializedProperty stringProperty = property.FindPropertyRelative("SerializedString");
stringProperty.stringValue = EditorGUI.TextField(position, stringProperty.stringValue);
}
}
MonoBehaviour我正在使用测试泛型类如下:
using UnityEngine;
using System.Collections;
public class TestClass : MonoBehaviour
{
enum BasicEnum
{
First,
Second,
Third,
Fourth
}
[SerializeField]
GenericClass<BasicEnum> _editorEnum;
}
使用此当前代码,MonoBehaviour TestClass不会在检查器中显示任何内容.它应该显示一个文本字段.
我相信这是由于该类的通用性质,但我一直无法找到使用带有通用类的自定义属性抽屉的任何人的示例.
我的问题是 – 这可能吗?我在代码中遗漏了哪些文本字段按预期显示?如果当前代码不可能,那么泛型类的属性抽屉是否有任何变通方法?
感谢您的时间!
解决方法:
这不起作用,因为Unity当前(4.x / 5.0)不会序列化泛型类.序列化泛型的一个技巧是继承它们.例如,在这种情况下,您可以:
[Serializable]
class GenericClassInt: GenericClass<int> { ... }
[Serializable]
class GenericClassFloat: GenericClass<float> { ... }
然后你可以拥有字段的编辑器:
[CustomPropertyDrawer(typeof(GenericClassInt))]
[CustomPropertyDrawer(typeof(GenericClassFloat))]
public class GenericClassDrawer: PropertyDrawer { ... }
这并不像它可能那么优雅,但解决了这个问题.
内容总结
以上是互联网集市为您收集整理的通用类C#Unity的自定义属性抽屉全部内容,希望文章能够帮你解决通用类C#Unity的自定义属性抽屉所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。