если же попытаться сохранить несколько дорог, вываливается ошибка чтения. вот кусок скрипта, отвечающего за сохранение:
p.s. структуру копировал из obj файла, созданном в 3д максе, и возможно где-то тут ошибка кроется
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
public class RoadsToObject {
public static void CreateFile(List<RoadPoint> roads, string filename)
{
if(roads == null || roads.Count <=0)
{
Debug.LogError("Road not select");
return;
}
if (string.IsNullOrEmpty(filename))
{
Debug.LogError("File name error");
return;
}
if (File.Exists(filename))
{
Debug.LogError("File already exists");
return;
}
StringBuilder meshString = new StringBuilder();
meshString.Append("#" + "Roads.obj" + "\n"
+ "#" + System.DateTime.Now.ToLongDateString() + "\n"
+ "#" + System.DateTime.Now.ToLongTimeString() + "\n"
+ "#-------" + "\n");
for(int i = 0; i < roads.Count; i++)
{
if (roads[i] == null)
continue;
meshString.Append(CreateData(roads[i], i));
}
Debug.Log(meshString.ToString());
WriteToFile(meshString.ToString(),filename);
}
private static void WriteToFile(string s, string filename)
{
using (StreamWriter sw = new StreamWriter(filename))
{
sw.Write(s);
}
}
private static string CreateData(RoadPoint obj, int child)
{
StringBuilder data = new StringBuilder();
data.Append( "#" + "\n"
+ "# shape Road" + child + "\n"
+ "#" + "\n"
+ "\n");
foreach (Vector3 pos in obj.Points)
{
data.Append(string.Format("v {0} {1} {2} \n",pos.x.ToString(), pos.y.ToString(), pos.z.ToString()));
}
data.Append(string.Format("# {0} vertices\n", obj.Points.Count));
data.Append(string.Format("g Road{0}\n", child));
data.Append(string.Format("usemtl wire_008110135\n",child));
data.Append("l");
for (int i = 0; i < obj.Points.Count; i++)
{
data.Append(string.Format(" {0}", (i + 1)));
}
data.Append("\n");
return data.ToString();
}
}
using UnityEngine;
using System.IO;
using System.Text;
public class RoadsToObject {
public static void CreateFile(List<RoadPoint> roads, string filename)
{
if(roads == null || roads.Count <=0)
{
Debug.LogError("Road not select");
return;
}
if (string.IsNullOrEmpty(filename))
{
Debug.LogError("File name error");
return;
}
if (File.Exists(filename))
{
Debug.LogError("File already exists");
return;
}
StringBuilder meshString = new StringBuilder();
meshString.Append("#" + "Roads.obj" + "\n"
+ "#" + System.DateTime.Now.ToLongDateString() + "\n"
+ "#" + System.DateTime.Now.ToLongTimeString() + "\n"
+ "#-------" + "\n");
for(int i = 0; i < roads.Count; i++)
{
if (roads[i] == null)
continue;
meshString.Append(CreateData(roads[i], i));
}
Debug.Log(meshString.ToString());
WriteToFile(meshString.ToString(),filename);
}
private static void WriteToFile(string s, string filename)
{
using (StreamWriter sw = new StreamWriter(filename))
{
sw.Write(s);
}
}
private static string CreateData(RoadPoint obj, int child)
{
StringBuilder data = new StringBuilder();
data.Append( "#" + "\n"
+ "# shape Road" + child + "\n"
+ "#" + "\n"
+ "\n");
foreach (Vector3 pos in obj.Points)
{
data.Append(string.Format("v {0} {1} {2} \n",pos.x.ToString(), pos.y.ToString(), pos.z.ToString()));
}
data.Append(string.Format("# {0} vertices\n", obj.Points.Count));
data.Append(string.Format("g Road{0}\n", child));
data.Append(string.Format("usemtl wire_008110135\n",child));
data.Append("l");
for (int i = 0; i < obj.Points.Count; i++)
{
data.Append(string.Format(" {0}", (i + 1)));
}
data.Append("\n");
return data.ToString();
}
}