public bool LoadPreference() { SceneEditorPreference objXml = null; string[] guids = AssetDatabase.FindAssets("SceneEditorPref", null); if (guids.Length > 0) { string path = AssetDatabase.GUIDToAssetPath(guids[0]); Stream fs = new FileStream(path, FileMode.Open); XmlSerializer serializer = new XmlSerializer(typeof(SceneEditorPreference)); objXml = (SceneEditorPreference)serializer.Deserialize(fs); fs.Close(); } if (objXml != null) { autoSave = objXml.autoSave; return(true); } else { SavePreference(); return(false); } }
public static void DrawBrush(SceneEditorPreference preference, SceneObjectBrush brush, Vector3 pos, float radius, Vector3 normal) { radius = radius < preference.minBrushDrawSize?preference.minBrushDrawSize:radius; var gridPos = new Vector3(Mathf.FloorToInt(pos.x) + 0.5f, pos.y, Mathf.FloorToInt(pos.z) + 0.5f); if (preference.showBrushSize) { var corners = new Vector3[preference.brushDetail + 1]; var step = 360f / preference.brushDetail; var rot = Quaternion.FromToRotation(Vector3.up, normal); for (var i = 0; i <= corners.Length - 1; i++) { corners[i] = new Vector3(Mathf.Sin(step * i * Mathf.Deg2Rad), 0, Mathf.Cos(step * i * Mathf.Deg2Rad)) * radius + gridPos; var dir = corners[i] - gridPos; dir = rot * dir; corners[i] = dir + gridPos; RaycastHit hit; if (Physics.Raycast(corners[i] + normal.normalized, -normal, out hit, brush.size / 2, brush.pickableLayer)) { corners[i] = hit.point; } } Handles.color = preference.brushColor; Handles.DrawAAPolyLine(3, corners); } if (preference.showCentralDot) { Handles.color = new Color(preference.brushColor.r, preference.brushColor.g, preference.brushColor.b, 0.3f); Handles.DrawSolidDisc(gridPos, normal, preference.dotSize); } if (preference.showNormal) { Handles.color = preference.normalColor; if (brush.align2Surface) { Handles.ArrowHandleCap(0, gridPos, Quaternion.LookRotation(normal, Vector3.up), 2, EventType.Repaint); } else { Handles.ArrowHandleCap(0, gridPos, Quaternion.LookRotation(Vector3.up, Vector3.up), 2, EventType.Repaint); } } }