예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
                }
            }
        }