UnityEditor.GameObjectInspector.OnSceneDrag C# (CSharp) Method

OnSceneDrag() public method

public OnSceneDrag ( SceneView sceneView ) : void
sceneView SceneView
return void
        public void OnSceneDrag(SceneView sceneView)
        {
            GameObject target = base.target as GameObject;
            switch (PrefabUtility.GetPrefabType(target))
            {
                case PrefabType.Prefab:
                case PrefabType.ModelPrefab:
                {
                    Event current = Event.current;
                    EventType type = current.type;
                    if (type != EventType.DragUpdated)
                    {
                        if (type == EventType.DragPerform)
                        {
                            string uniqueNameForSibling = GameObjectUtility.GetUniqueNameForSibling(null, dragObject.name);
                            dragObject.hideFlags = HideFlags.None;
                            Undo.RegisterCreatedObjectUndo(dragObject, "Place " + dragObject.name);
                            EditorUtility.SetDirty(dragObject);
                            DragAndDrop.AcceptDrag();
                            Selection.activeObject = dragObject;
                            HandleUtility.ignoreRaySnapObjects = null;
                            EditorWindow.mouseOverWindow.Focus();
                            dragObject.name = uniqueNameForSibling;
                            dragObject = null;
                            current.Use();
                            break;
                        }
                        if (type == EventType.DragExited)
                        {
                            if (dragObject != null)
                            {
                                Object.DestroyImmediate(dragObject, false);
                                HandleUtility.ignoreRaySnapObjects = null;
                                dragObject = null;
                                current.Use();
                            }
                            break;
                        }
                    }
                    else
                    {
                        if (dragObject == null)
                        {
                            dragObject = (GameObject) PrefabUtility.InstantiatePrefab(PrefabUtility.FindPrefabRoot(target));
                            dragObject.hideFlags = HideFlags.HideInHierarchy;
                            dragObject.name = target.name;
                        }
                        if (HandleUtility.ignoreRaySnapObjects == null)
                        {
                            HandleUtility.ignoreRaySnapObjects = dragObject.GetComponentsInChildren<Transform>();
                        }
                        DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                        object obj3 = HandleUtility.RaySnap(HandleUtility.GUIPointToWorldRay(current.mousePosition));
                        if (obj3 != null)
                        {
                            RaycastHit hit = (RaycastHit) obj3;
                            float num = 0f;
                            if (Tools.pivotMode == PivotMode.Center)
                            {
                                float num2 = HandleUtility.CalcRayPlaceOffset(HandleUtility.ignoreRaySnapObjects, hit.normal);
                                if (num2 != float.PositiveInfinity)
                                {
                                    num = Vector3.Dot(dragObject.transform.position, hit.normal) - num2;
                                }
                            }
                            dragObject.transform.position = Matrix4x4.identity.MultiplyPoint(hit.point + ((Vector3) (hit.normal * num)));
                        }
                        else
                        {
                            dragObject.transform.position = HandleUtility.GUIPointToWorldRay(current.mousePosition).GetPoint(10f);
                        }
                        if (sceneView.in2DMode)
                        {
                            Vector3 position = dragObject.transform.position;
                            position.z = PrefabUtility.FindPrefabRoot(target).transform.position.z;
                            dragObject.transform.position = position;
                        }
                        current.Use();
                    }
                    break;
                }
            }
        }