bool IsValidSubSceneDropTarget(int dropTargetGameObjectOrSceneInstanceID, DropPosition dropPosition, Object[] draggedObjects)
        {
            if (draggedObjects == null || draggedObjects.Length == 0)
            {
                return(false);
            }

            Transform parentForDrop = GetTransformParentForDrop(dropTargetGameObjectOrSceneInstanceID, dropPosition);

            if (parentForDrop == null)
            {
                // Drop is on a root scene which is always allowed
                return(true);
            }

            foreach (var obj in draggedObjects)
            {
                var gameObject = obj as GameObject;
                if (gameObject == null)
                {
                    continue;
                }

                // Require all dragged objects to be valid (since native cannot filter out invalid sub scene drags currently)
                if (SubSceneGUI.IsChildOrSameAsOtherTransform(parentForDrop, gameObject.transform))
                {
                    return(false);
                }
            }

            // Valid drop target for current dragged objects
            return(true);
        }
示例#2
0
        private static bool CanSetParent(Transform transform, Transform target)
        {
            bool canSetParent = transform != target;

            if (target != null)
            {
                canSetParent = canSetParent && !transform.IsChildOf(target) && !target.IsChildOf(transform);
            }
            if (SubSceneGUI.IsSubSceneHeader(transform.gameObject))
            {
                canSetParent = canSetParent && !SubSceneGUI.IsChildOrSameAsOtherTransform(transform, target) && !SubSceneGUI.IsChildOrSameAsOtherTransform(target, transform);
            }

            return(canSetParent);
        }
        public static bool CanSetNewParent(Transform transform, Transform newParent)
        {
            if (transform == null)
            {
                throw new ArgumentNullException("transform");
            }

            if (newParent == null)
            {
                return(true);
            }

            RefreshSubSceneInfo();
            var parentIsChild = SubSceneGUI.IsChildOrSameAsOtherTransform(newParent, transform);

            return(!parentIsChild);
        }