static void SceneFunc(SceneView p_scn) { Sceneview2D scn = p_scn as Sceneview2D; if (scn == null) { return; } scn.EnforceCameraLimits(); Event e = Event.current; switch (e.type) { case EventType.ScrollWheel: scn.zoom += e.delta.y * 0.05f; break; default: break; } }
void SceneBypass(SceneView p_scn) { Sceneview2D scn = p_scn as Sceneview2D; Selection.activeGameObject = editedTilemap.gameObject; if (scn == null) { return; } minSize = new Vector2(editedTilemap.spriteSheet.width - 1, editedTilemap.spriteSheet.height + 69); maxSize = new Vector2(editedTilemap.spriteSheet.width, editedTilemap.spriteSheet.height + 70); HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); Event e = Event.current; Vector3 pos = e.mousePosition; Vector3 localPos = scn.camera.ScreenToWorldPoint(new Vector3(pos.x, scn.position.height - SceneView.kToolbarHeight - pos.y, 0)) - (editedTilemap.renderer.bounds.min); int x = (int)(localPos.x / editedTilemap.tileSize); int y = (int)(localPos.y / editedTilemap.tileSize); if (e.type == EventType.MouseDown) { if (_currentPaintTool == PaintTool.COLLISION_SWITCHER) { _currentSwitch = editedTilemap.IsPassable(x, y); } } else if (e.type == EventType.MouseDrag || e.type == EventType.MouseUp) { if (e.button == 0) { e.Use(); if (_currentPaintTool == PaintTool.PENCIL) { for (int i = 0; i < _currentSelection.width; ++i) { for (int j = 0; j < _currentSelection.height; ++j) { editedTilemap.setIndex(x + i, y + j, _currentSelection.array[i, j]); } } } else if (_currentPaintTool == PaintTool.ERASER) { editedTilemap.setIndex(x, y, -1); } else if (_currentPaintTool == PaintTool.BUCKET) { if (_currentSelection.array.Length > 0) { editedTilemap.FloodFill(x, y, _currentSelection.array[0, 0]); } } else if (_currentPaintTool == PaintTool.COLLISION_SWITCHER) { editedTilemap.SetCollision(x, y, _currentSwitch); } editedTilemap.MakeTilemap(); } } Vector3[] vertex = null; if (_currentPaintTool == PaintTool.COLLISION_SWITCHER) { for (int i = 0; i < editedTilemap.width; ++i) { for (int j = 0; j < editedTilemap.height; ++j) { if (!editedTilemap.IsPassable(i, j)) { vertex = new Vector3[] { new Vector3(editedTilemap.renderer.bounds.min.x + i * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + j * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + i * editedTilemap.tileSize + editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + j * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + i * editedTilemap.tileSize + editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + j * editedTilemap.tileSize + editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + i * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + j * editedTilemap.tileSize + editedTilemap.tileSize, 0) }; Handles.DrawSolidRectangleWithOutline(vertex, new Color(0.5f, 0, 0, 0.5f), Color.red); } } } } if (_currentPaintTool == PaintTool.PENCIL) { vertex = new Vector3[] { new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize + _currentSelection.width * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize + _currentSelection.width * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize + _currentSelection.height * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize + _currentSelection.height * editedTilemap.tileSize, 0) }; } else { vertex = new Vector3[] { new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize + editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize + editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize + editedTilemap.tileSize, 0), new Vector3(editedTilemap.renderer.bounds.min.x + x * editedTilemap.tileSize, editedTilemap.renderer.bounds.min.y + y * editedTilemap.tileSize + editedTilemap.tileSize, 0) }; } Handles.color = Color.red; Handles.DrawSolidRectangleWithOutline(vertex, new Color(0, 0, 0.4f, 0.1f), Color.red); scn.Repaint(); }
//------------------------------ public override void OnEnable() { base.OnEnable(); _current = this; onSceneGUIDelegate += SceneFunc; }
static public void OpenView() { Sceneview2D swin = GetWindow <Sceneview2D>("2DSceneView", typeof(SceneView)); swin.Show(); }