/// <summary>
        /// Executes the action.
        /// </summary>
        public void Execute()
        {
            if (_gameObjects.Count != 0)
            {
                // Take a snapshot to allow for undo
                _preChangeMaskSnapshot = new ObjectSelectionMaskSnapshot();
                _preChangeMaskSnapshot.TakeSnapshot();

                // Assign the objects to the selection mask.
                // Note: We will also perform a snapshot of the current object selection just in case
                //       the object selection changes after the objects are assigned to the mask.
                _preChangeSelectionSnapshot = new ObjectSelectionSnapshot();
                _preChangeSelectionSnapshot.TakeSnapshot();
                EditorObjectSelection editorObjectSelection = EditorObjectSelection.Instance;
                _selectionWasChanged = editorObjectSelection.AddGameObjectCollectionToSelectionMask(_gameObjects);

                // If the selection was changed, we will perform a snapshot post change to make sure that we
                // can undo and redo the action accordingly. For example, if assigning the objects to the mask
                // caused a selection change, when the operation is undone, we want to restore both the mask
                // and the state that the selection was in before the mask was updated.
                if (_selectionWasChanged)
                {
                    _postChangeSelectionSnapshot = new ObjectSelectionSnapshot();
                    _postChangeSelectionSnapshot.TakeSnapshot();
                }

                // Take a snapshot to allow for redo
                _postChangeMaskSnapshot = new ObjectSelectionMaskSnapshot();
                _postChangeMaskSnapshot.TakeSnapshot();

                ObjectsAddedToSelectionMaskMessage.SendToInterestedListeners(_gameObjects);
                EditorUndoRedoSystem.Instance.RegisterAction(this);
            }
        }
        /// <summary>
        /// Executes the action.
        /// </summary>
        public void Execute()
        {
            if (_gameObjects.Count != 0)
            {
                // Take a snapshot to allow for undo
                _preChangeMaskSnapshot = new ObjectSelectionMaskSnapshot();
                _preChangeMaskSnapshot.TakeSnapshot();

                // Remove the objects from the selection mask.
                EditorObjectSelection editorObjectSelection = EditorObjectSelection.Instance;
                editorObjectSelection.RemoveGameObjectCollectionFromSelectionMask(_gameObjects);

                // Take a snapshot to allow for redo
                _postChangeMaskSnapshot = new ObjectSelectionMaskSnapshot();
                _postChangeMaskSnapshot.TakeSnapshot();

                ObjectsRemovedFromSelectionMaskMessage.SendToInterestedListeners(_gameObjects);
                EditorUndoRedoSystem.Instance.RegisterAction(this);
            }
        }