public XTerrainInfo LoadTerrainInfo(string path)
    {
        FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
        BinaryReader reader = new BinaryReader(fs);

        XTerrainInfo info = new XTerrainInfo();
        float x = reader.ReadSingle();
        float y = reader.ReadSingle();
        float z = reader.ReadSingle();
        info.pos = new Vector3(x, y, z);
        info.sliceSize = reader.ReadInt32();
        info.treeDistance = reader.ReadSingle();
        info.treeBillboardDistance = reader.ReadSingle();
        info.treeCrossFadeLength = reader.ReadInt32();
        info.treeMaximumFullLODCount = reader.ReadInt32();
        info.detailObjectDistance = reader.ReadSingle();
        info.detailObjectDensity = reader.ReadSingle();
        info.heightmapPixelError = reader.ReadSingle();
        info.heightmapMaximumLOD = reader.ReadInt32();
        info.basemapDistance = reader.ReadSingle();
        info.lightmapIndex = reader.ReadInt32();
        info.castShadows = reader.ReadBoolean();
        LoadPartsInfo(reader);
        reader.Close();
        fs.Close();
        return info;
    }
    public void SetRoot(Transform terrain, Transform collider, string name)
    {
        terrain_root = terrain;
        collider_root = collider;
        parts_root = GameObject.Find("runtime_parts").transform;
        terrain_name = name;

        string path = "Assets/Resources/" + name + "/" + name;
        terrain_info = LoadTerrainInfo(path + ".bytes");
        
        if (map == null)
        {
            map = new Dictionary<int, Terrain>();
        }
        else
        {
            map.Clear();
        }
        bxs = collider_root.GetComponentsInChildren<TerrainNode>();
    }