【发布时间】:2018-12-06 19:48:02
【问题描述】:
我正在尝试为 Unity GameObject 创建一个组件,我们称之为 MediaController。我希望它能够管理不同媒体(音频/视频)的时间(播放/暂停/等)。我创建了一个具有基本属性/字段/方法的抽象类PlayableMedia,并创建了两个类,PlayableVideo 和PlayableAudio,它们根据我们的需要继承和实现。
目的是有一个单一的PlayableMedia 列表,它可能与音频/视频无关,允许在特定应用时间进行简单(即)media.Play() 调用,无论类型如何......但我的字段public List<PlayableMedia> MediaList; 是没有出现在编辑器中,也没有错误。
所以最终我的问题是如标题所述:是否可以使用 PlayableMedia 类作为字段的类型?
根据我的经验,我怀疑“不”,但我发现链接说“是”或“是的,有点”似乎指向 to custom editors/inspectors/drawers,但我对这些的经验为 0并且无法实现(见下文)。
[System.Serializable]
public class RegisteredMedia
{
public float StartTime;
public PlayableMedia Media;
}
[CustomPropertyDrawer(typeof(RegisteredMedia))]
class RegisteredMediaDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), new GUIContent("Playable Media"));
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
Rect rectStartTime = new Rect(position.x, position.y, 30, position.height);
Rect rectMedia = new Rect(position.x + 35, position.y, 50, position.height);
EditorGUI.PropertyField(rectStartTime, property.FindPropertyRelative("StartTime"), GUIContent.none);
EditorGUI.PropertyField(rectMedia, property.FindPropertyRelative("Media"), GUIContent.none);
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
}
public class MediaController : MonoBehaviour
{
public List<RegisteredMedia> MediaList = new List<RegisteredMedia>();
\\[...] rest of implementation
}
谁能帮帮我?要么确认这是不可能的,或者如果是的话,请帮助我实施?
另外,如果可以使用自定义编辑器/检查器/抽屉来完成,有人可以帮我在List<RegisteredMedia> 中获取单个项目以显示为Start Time ____ Playable Media [=====](其中PlayableMedia 将是GameObject 与正确的组件连接)?
【问题讨论】:
标签: c# unity3d unity-editor