/// <summary> /// Draw the inspector /// </summary> public override void OnInspectorGUI() { base.serializedObject.Update(); DirectorGroup directorGroup = base.serializedObject.targetObject as DirectorGroup; TimelineTrack[] tracks = directorGroup.GetTracks(); if (tracks.Length > 0) { containerFoldout = EditorGUILayout.Foldout(containerFoldout, tracksContent); if (containerFoldout) { EditorGUI.indentLevel++; foreach (TimelineTrack track in tracks) { EditorGUILayout.ObjectField(track.name, track, typeof(GlobalTrack), true); } EditorGUI.indentLevel--; } } if (GUILayout.Button(addTrackContent)) { GenericMenu createMenu = new GenericMenu(); createMenu.AddItem(addShotTrackContent, false, addShotTrack); createMenu.AddItem(addAudioTrackContent, false, addAudioTrack); createMenu.AddItem(addActionTrackContent, false, addGlobalItemTrack); createMenu.ShowAsContext(); } base.serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Add an empty shot track to a given director group /// </summary> /// <param name="directorGroup">The director group to add a shot track to</param> /// <returns>The new shot track</returns> internal static ShotTrack CreateShotTrack(DirectorGroup directorGroup) { GameObject shotTrackGO = new GameObject(SHOT_TRACK_LABEL, typeof(ShotTrack)); shotTrackGO.transform.parent = directorGroup.transform; return(shotTrackGO.GetComponent <ShotTrack>()); }
internal static GlobalItemTrack CreateGlobalItemTrack(DirectorGroup directorGroup) { string name = DirectorHelper.getCutsceneItemName(directorGroup.gameObject, GLOBAL_TRACK_LABEL, typeof(GlobalItemTrack)); GameObject globalTrackGO = new GameObject(name, typeof(GlobalItemTrack)); globalTrackGO.transform.parent = directorGroup.transform; return(globalTrackGO.GetComponent <GlobalItemTrack>()); }
internal static AudioTrack CreateAudioTrack(DirectorGroup directorGroup) { string name = DirectorHelper.getCutsceneItemName(directorGroup.gameObject, AUDIO_TRACK_LABEL, typeof(AudioTrack)); GameObject audioTrackGO = new GameObject(name, typeof(AudioTrack)); audioTrackGO.transform.parent = directorGroup.transform; return(audioTrackGO.GetComponent <AudioTrack>()); }
/// <summary> /// Draw the inspector /// </summary> public override void OnInspectorGUI() { base.serializedObject.Update(); DirectorGroup directorGroup = base.serializedObject.targetObject as DirectorGroup; TimelineTrack[] tracks = directorGroup.GetTracks(); EditorGUILayout.PropertyField(optimizable); if (tracks.Length > 0) { containerFoldout = EditorGUILayout.Foldout(containerFoldout, tracksContent); if (containerFoldout) { EditorGUI.indentLevel++; { var __array1 = tracks; var __arrayLength1 = __array1.Length; for (int __i1 = 0; __i1 < __arrayLength1; ++__i1) { var track = (TimelineTrack)__array1[__i1]; { EditorGUILayout.BeginHorizontal(); track.name = EditorGUILayout.TextField(track.name); if (GUILayout.Button(inspectorIcon, GUILayout.Width(24))) { Selection.activeObject = track; } EditorGUILayout.EndHorizontal(); } } } EditorGUI.indentLevel--; } } if (GUILayout.Button(addTrackContent)) { CutsceneControlHelper.ShowAddTrackContextMenu(directorGroup); } base.serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Draw the inspector /// </summary> public override void OnInspectorGUI() { serializedObject.Update(); DirectorGroup directorGroup = serializedObject.targetObject as DirectorGroup; TimelineTrack[] tracks = directorGroup.GetTracks(); EditorGUILayout.PropertyField(optimizable); if (tracks.Length > 0) { containerFoldout = EditorGUILayout.Foldout(containerFoldout, tracksContent); if (containerFoldout) { EditorGUI.indentLevel++; foreach (TimelineTrack track in tracks) { EditorGUILayout.BeginHorizontal(); track.name = EditorGUILayout.TextField(track.name); if (GUILayout.Button(inspectorIcon, GUILayout.Width(24))) { Selection.activeObject = track; } EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; } } if (GUILayout.Button(addTrackContent)) { CutsceneControlHelper.ShowAddTrackContextMenu(directorGroup); } serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Draws the Director GUI /// </summary> protected void OnGUI() { scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); { txtCutsceneName = EditorGUILayout.TextField(NameContentCutscene, txtCutsceneName); EditorGUILayout.BeginHorizontal(); txtDuration = EditorGUILayout.FloatField(DurationContentCutscene, txtDuration); timeEnum = (DirectorHelper.TimeEnum)EditorGUILayout.EnumPopup(timeEnum); EditorGUILayout.EndHorizontal(); isLooping = EditorGUILayout.Toggle(LoopingContentCutscene, isLooping); isSkippable = EditorGUILayout.Toggle(SkippableContentCutscene, isSkippable); StartMethod = (StartMethod)EditorGUILayout.EnumPopup(new GUIContent("开始方法"), StartMethod); EditorGUILayout.Space(); EditorGUILayout.LabelField("轨道组", EditorStyles.boldLabel); // Director Group directorTrackGroupsSelection = EditorGUILayout.Popup(AddDirectorGroupContent, directorTrackGroupsSelection, intValues1.ToArray()); if (directorTrackGroupsSelection > 0) { EditorGUI.indentLevel++; // Shot Tracks shotTrackSelection = EditorGUILayout.Popup(AddShotTracksContent, shotTrackSelection, intValues1.ToArray()); // Audio Tracks audioTrackSelection = EditorGUILayout.Popup(AddAudioTracksContent, audioTrackSelection, intValues4.ToArray()); // Global Item Tracks globalItemTrackSelection = EditorGUILayout.Popup(AddGlobalTracksContent, globalItemTrackSelection, intValues10.ToArray()); EditorGUI.indentLevel--; } EditorGUILayout.Space(); // Actor Track Groups int actorCount = EditorGUILayout.Popup(new GUIContent("主角轨道群组"), actorTrackGroupsSelection, intValues10.ToArray()); if (actorCount != actorTrackGroupsSelection) { actorTrackGroupsSelection = actorCount; Transform[] tempActors = new Transform[actors.Length]; Array.Copy(actors, tempActors, actors.Length); actors = new Transform[actorCount]; int amount = Math.Min(actorCount, tempActors.Length); Array.Copy(tempActors, actors, amount); } EditorGUI.indentLevel++; for (int i = 1; i <= actorTrackGroupsSelection; i++) { actors[i - 1] = EditorGUILayout.ObjectField(new GUIContent(string.Format("主角 {0}", i)), actors[i - 1], typeof(Transform), true) as Transform; } EditorGUI.indentLevel--; EditorGUILayout.Space(); // Multi Actor Track Groups multiActorTrackGroupsSelection = EditorGUILayout.Popup(new GUIContent("多主角轨道群组"), multiActorTrackGroupsSelection, intValues10.ToArray()); EditorGUI.indentLevel++; EditorGUI.indentLevel--; Add(ref characters, ref characterTrackGroupsSelection, "ActorTrackGroups"); for (int i = 1; i <= characterTrackGroupsSelection; i++) { characters[i - 1] = EditorGUILayout.ObjectField(new GUIContent(string.Format("角色 {0}", i)), characters[i - 1], typeof(Transform), true) as Transform; } EditorGUI.indentLevel--; } EditorGUILayout.EndScrollView(); EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("I'm Feeling Lucky")) { List <Transform> interestingActors = UnitySceneEvaluator.GetHighestRankedGameObjects(10); actorTrackGroupsSelection = interestingActors.Count; actors = interestingActors.ToArray(); } if (GUILayout.Button("创建剧情")) { string cutsceneName = DirectorHelper.getCutsceneItemName(txtCutsceneName, typeof(Cutscene)); GameObject cutsceneGO = new GameObject(cutsceneName); Cutscene cutscene = cutsceneGO.AddComponent <Cutscene>(); for (int i = 0; i < directorTrackGroupsSelection; i++) { DirectorGroup dg = CutsceneItemFactory.CreateDirectorGroup(cutscene); dg.Ordinal = 0; for (int j = 0; j < shotTrackSelection; j++) { CutsceneItemFactory.CreateShotTrack(dg); } for (int j = 0; j < audioTrackSelection; j++) { CutsceneItemFactory.CreateAudioTrack(dg); } for (int j = 0; j < globalItemTrackSelection; j++) { CutsceneItemFactory.CreateGlobalItemTrack(dg); } } for (int i = 0; i < actorTrackGroupsSelection; i++) { CutsceneItemFactory.CreateActorTrackGroup(cutscene, actors[i]); } for (int i = 0; i < multiActorTrackGroupsSelection; i++) { CutsceneItemFactory.CreateMultiActorTrackGroup(cutscene); } for (int i = 0; i < characterTrackGroupsSelection; i++) { CutsceneItemFactory.CreateCharacterTrackGroup(cutscene, characters[i]); } float duration = txtDuration; if (timeEnum == DirectorHelper.TimeEnum.Minutes) { duration *= 60; } cutscene.Duration = duration; int undoIndex = Undo.GetCurrentGroup(); if (StartMethod != StartMethod.None) { GameObject cutsceneTriggerGO = new GameObject("Cutscene Trigger"); CutsceneTrigger cutsceneTrigger = cutsceneTriggerGO.AddComponent <CutsceneTrigger>(); if (StartMethod == StartMethod.OnTrigger) { cutsceneTriggerGO.AddComponent <BoxCollider>(); } cutsceneTrigger.StartMethod = StartMethod; cutsceneTrigger.Cutscene = cutscene; Undo.RegisterCreatedObjectUndo(cutsceneTriggerGO, string.Format("Created {0}", txtCutsceneName)); } Undo.RegisterCreatedObjectUndo(cutsceneGO, string.Format("Created {0}", txtCutsceneName)); Undo.CollapseUndoOperations(undoIndex); Selection.activeTransform = cutsceneGO.transform; } } EditorGUILayout.EndHorizontal(); }
public Cutscene CreateCutscene() { string cutsceneName = DirectorHelper.getCutsceneItemName(txtCutsceneName, typeof(Cutscene)); GameObject cutsceneGO = new GameObject(cutsceneName); Cutscene cutscene = cutsceneGO.AddComponent <Cutscene>(); for (int i = 0; i < directorTrackGroupsSelection; i++) { DirectorGroup dg = CutsceneItemFactory.CreateDirectorGroup(cutscene); dg.Ordinal = 0; for (int j = 0; j < shotTrackSelection; j++) { CutsceneItemFactory.CreateShotTrack(dg); } for (int j = 0; j < audioTrackSelection; j++) { CutsceneItemFactory.CreateAudioTrack(dg); } for (int j = 0; j < globalItemTrackSelection; j++) { CutsceneItemFactory.CreateGlobalItemTrack(dg); } } for (int i = 0; i < actorTrackGroupsSelection; i++) { CutsceneItemFactory.CreateActorTrackGroup(cutscene, actors[i]); } for (int i = 0; i < multiActorTrackGroupsSelection; i++) { CutsceneItemFactory.CreateMultiActorTrackGroup(cutscene); } for (int i = 0; i < characterTrackGroupsSelection; i++) { CutsceneItemFactory.CreateCharacterTrackGroup(cutscene, characters[i]); } float duration = txtDuration; if (timeEnum == DirectorHelper.TimeEnum.Minutes) { duration *= 60; } cutscene.Duration = duration; cutscene.IsLooping = isLooping; cutscene.IsSkippable = isSkippable; int undoIndex = Undo.GetCurrentGroup(); if (StartMethod != StartMethod.None) { CreateCutsceneTrigger(cutscene); } Undo.RegisterCreatedObjectUndo(cutsceneGO, string.Format("Created {0}", txtCutsceneName)); Undo.CollapseUndoOperations(undoIndex); Selection.activeTransform = cutsceneGO.transform; return(cutscene); }
internal void addGlobalItemTrack() { DirectorGroup directorGroup = base.serializedObject.targetObject as DirectorGroup; Undo.RegisterCreatedObjectUndo(CutsceneItemFactory.CreateGlobalItemTrack(directorGroup), "Create Global Track"); }
internal static GlobalItemTrack CreateGlobalItemTrack(DirectorGroup directorGroup) { string name = DirectorHelper.getCutsceneItemName(directorGroup.gameObject, GLOBAL_TRACK_LABEL, typeof(GlobalItemTrack)); GameObject globalTrackGO = new GameObject(name, typeof(GlobalItemTrack)); globalTrackGO.transform.parent = directorGroup.transform; return globalTrackGO.GetComponent<GlobalItemTrack>(); }
internal static AudioTrack CreateAudioTrack(DirectorGroup directorGroup) { string name = DirectorHelper.getCutsceneItemName(directorGroup.gameObject, AUDIO_TRACK_LABEL, typeof(AudioTrack)); GameObject audioTrackGO = new GameObject(name, typeof(AudioTrack)); audioTrackGO.transform.parent = directorGroup.transform; return audioTrackGO.GetComponent<AudioTrack>(); }
/// <summary> /// Add an empty shot track to a given director group /// </summary> /// <param name="directorGroup">The director group to add a shot track to</param> /// <returns>The new shot track</returns> internal static ShotTrack CreateShotTrack(DirectorGroup directorGroup) { GameObject shotTrackGO = new GameObject(SHOT_TRACK_LABEL, typeof(ShotTrack)); shotTrackGO.transform.parent = directorGroup.transform; return shotTrackGO.GetComponent<ShotTrack>(); }
private void addShotTrack() { DirectorGroup dg = TrackGroup.Behaviour as DirectorGroup; Undo.RegisterCreatedObjectUndo(CutsceneItemFactory.CreateShotTrack(dg), "Create Shot Track"); }