public void TargetGUI(Follow instance) { Event evt = Event.current; Rect drop_area = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true)); GUI.Box(drop_area, "Drag Target Objects Here"); for (int i = 0; i < instance.targets.Count; i++) { DrawPrefabIcon(instance, i); } switch (evt.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!drop_area.Contains(evt.mousePosition)) { return; } DragAndDrop.visualMode = DragAndDropVisualMode.Generic; if (evt.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (GameObject prefab in DragAndDrop.objectReferences) { instance.AddTarget(prefab.transform); } } break; } }
private void DrawPrefabIcon(Follow instance, int id) { EditorGUILayout.BeginHorizontal(); instance.targets[id] = (Transform)EditorGUILayout.ObjectField(instance.targets[id], typeof(Transform), true); GUI.color = Color.red; if (GUILayout.Button("X")) { instance.targets.RemoveAt(id); } GUI.color = Color.white; EditorGUILayout.EndHorizontal(); }
public override void OnInspectorGUI() { Follow instance = (Follow)target; instance.updateState = (UpdateState)EditorGUILayout.EnumPopup("Update Type", instance.updateState); instance.followState = (FollowStates)EditorGUILayout.EnumPopup("Follow Type", instance.followState); switch (instance.followState) { case FollowStates.Me: EditorGUILayout.HelpBox("All of the target objects will follow this transform.", MessageType.Info); break; case FollowStates.You: EditorGUILayout.HelpBox("This transform will follow the target transform.", MessageType.Info); break; case FollowStates.Mean: EditorGUILayout.HelpBox("This transform will follow the center point of all of the targets.", MessageType.Info); break; } instance.followPosition = EditorGUILayout.Toggle("Follow Position", instance.followPosition); instance.followRotation = EditorGUILayout.Toggle("Follow Rotation", instance.followRotation); instance.positionSmoothTime = EditorGUILayout.FloatField("Position Smooth Time", instance.positionSmoothTime); instance.rotationSmoothTime = EditorGUILayout.FloatField("Rotation Smooth Time", instance.rotationSmoothTime); switch (instance.followState) { case FollowStates.Me: TargetGUI(instance); break; case FollowStates.You: if (instance.targets.Count < 1) { instance.targets.Add(null); } EditorGUILayout.PrefixLabel("Target"); instance.targets[0] = (Transform)EditorGUILayout.ObjectField(instance.targets[0], typeof(Transform), true); break; case FollowStates.Mean: TargetGUI(instance); break; } }