| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | using UnityEditor;using UnityEngine;using Newtonsoft.Json;using System.Collections.Generic;using System.IO;using System.Drawing.Drawing2D;using System.Linq;using System.Text.RegularExpressions;public class PositionExporterEditor : EditorWindow{    [MenuItem("Tools/Export Positions to JSON")]    public static void ShowWindow()    {        GetWindow<PositionExporterEditor>("Export Positions to JSON");    }    private GameObject[] objectsToProcess;    private int ExtractNumber(string name)    {        // Extract the first number from the name        var match = Regex.Match(name, @"\d+");        return match.Success ? int.Parse(match.Value) : 0;    }    private void OnGUI()    {        GUILayout.Label("Export Positions to JSON", EditorStyles.boldLabel);        if (GUILayout.Button("Select GameObjects"))        {            objectsToProcess = Selection.gameObjects;            // Sort the objects by numeric value in their names            if (objectsToProcess != null)            {                objectsToProcess = objectsToProcess                    .OrderBy(go => ExtractNumber(go.name))                    .ToArray();            }        }        if (objectsToProcess != null && objectsToProcess.Length > 0)        {            GUILayout.Label("Selected GameObjects:");            foreach (var obj in objectsToProcess)            {                GUILayout.Label(obj.name);            }            if (GUILayout.Button("Export to JSON"))            {                ExportPositionsToJson();            }        }        else        {            GUILayout.Label("No GameObjects selected.");        }    }    [System.Serializable]    public class PathPoint {        public PathPoint(double l1,double l2) {            longitude = l1;            latitude = l2;        }        public double longitude;        public double latitude;    }    [System.Serializable]    public class ObjPos {        public string objName;        public List<PathPoint> paths = new List<PathPoint>();    }    private void ExportPositionsToJson()    {        if (objectsToProcess == null || objectsToProcess.Length == 0)        {            EditorUtility.DisplayDialog("Error", "No GameObjects selected.", "OK");            return;        }        List<ObjPos> objPos = new List<ObjPos>();        foreach (var obj in objectsToProcess)        {            ObjPos obj1 = new ObjPos();            obj1.objName = obj.name;            foreach (Transform child in obj.transform)            {                double longitude = (child.localPosition.x - 0.5 + 8607.658) / 75.642;                double latitude = (child.localPosition.y + 6.7 + 2640.548) / 87.990;                obj1.paths.Add(new PathPoint(longitude,latitude));            }            objPos.Add(obj1);        }        string json = JsonConvert.SerializeObject(objPos);        string path = EditorUtility.SaveFilePanel("Save JSON file", "", "positions.json", "json");        if (!string.IsNullOrEmpty(path))        {            File.WriteAllText(path, json);            EditorUtility.DisplayDialog("Success", "Positions exported successfully.", "OK");        }    }}
 |