public static void OnSceneGUI() { if (m_level == null) { return; } if (Editing) { // if(m_grid.ContentsMesh == null) { m_grid.RebuildMeshes(); } var e = Event.current; Vector2 worldPos = Camera.main.ScreenToWorldPoint(Event.current.mousePosition); Ray targetRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); Plane zeroPlane = new Plane(new Vector3(0.0f, 0.0f, -1.0f), new Vector3(1.0f, 0.0f, 0.0f)); float hit; if (zeroPlane.Raycast(targetRay, out hit)) { var hitLocation = targetRay.GetPoint(hit); float size = HandleUtility.GetHandleSize(hitLocation) * 0.2f; Handles.SphereCap(0, hitLocation, Quaternion.identity, size); if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown)) { Point gridPosition = GameObject.FindObjectOfType <Level>().GetGrid().GetCellIndices(hitLocation); if (gridPosition != null) { m_layout.SetTileContents(gridPosition.x, gridPosition.y, e.button == 0); Level.Instance.LoadFromLayout(m_layout); } } } if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown) && (e.button == 0 || e.button == 1) || (e.type == EventType.Layout)) { Event.current.Use(); HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); } } }