Синтаксис:
Используется csharp
static class CubemapSaver
{
[System.Serializable]
private class CubemapFile
{
[System.Serializable]
private class ColorSL
{
float[] R, G, B, A;
public ColorSL(Color[] colors)
{
if(colors == null) return;
R = new float[colors.Length];
G = new float[colors.Length];
B = new float[colors.Length];
A = new float[colors.Length];
for (int i = 0; i < colors.Length; i++)
{
R[i] = colors[i].r;
G[i] = colors[i].g;
B[i] = colors[i].b;
A[i] = colors[i].a;
}
}
public Color[] GetColors()
{
Color[] temp = new Color[R.Length];
for (int i = 0; i < temp.Length; i++)
{
temp[i] = new Color(R[i], G[i], B[i], A[i]);
}
return temp;
}
}
private ColorSL NegativeX;
private ColorSL NegativeY;
private ColorSL NegativeZ;
private ColorSL PositiveX;
private ColorSL PositiveY;
private ColorSL PositiveZ;
public CubemapFile(Cubemap temp)
{
GetPixelsAtCubemap(temp);
}
public void SetPixelsAtCubemap(Cubemap temp)
{
temp.SetPixels(NegativeX.GetColors(), CubemapFace.NegativeX);
temp.SetPixels(NegativeY.GetColors(), CubemapFace.NegativeY);
temp.SetPixels(NegativeZ.GetColors(), CubemapFace.NegativeZ);
temp.SetPixels(PositiveX.GetColors(), CubemapFace.PositiveX);
temp.SetPixels(PositiveY.GetColors(), CubemapFace.PositiveY);
temp.SetPixels(PositiveZ.GetColors(), CubemapFace.PositiveZ);
temp.Apply(true);
}
public void GetPixelsAtCubemap(Cubemap temp)
{
NegativeX = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
NegativeY = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
NegativeZ = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
PositiveX = new ColorSL(temp.GetPixels(CubemapFace.PositiveX));
PositiveY = new ColorSL(temp.GetPixels(CubemapFace.PositiveY));
PositiveZ = new ColorSL(temp.GetPixels(CubemapFace.PositiveZ));
}
}
public static void Save(Cubemap obj, string fileName)
{
FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
try
{
CubemapFile temp = new CubemapFile(obj);
formatter.Serialize(fs, temp);
}
catch (SerializationException e)
{
Debug.Log("Failed to serialize. Reason: " + e.Message);
throw;
}
finally
{
fs.Close();
}
}
public static Cubemap Load(Cubemap obj,string fileName)
{
if (!File.Exists(fileName + ".cubemap")) return null;
FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Open);
CubemapFile temp = null;
try
{
BinaryFormatter formatter = new BinaryFormatter();
temp = (CubemapFile)formatter.Deserialize(fs);
temp.SetPixelsAtCubemap(obj);
}
catch (SerializationException e)
{
Debug.Log("Failed to deserialize. Reason: " + e.Message);
throw;
}
finally
{
fs.Close();
}
return obj;
}
}
{
[System.Serializable]
private class CubemapFile
{
[System.Serializable]
private class ColorSL
{
float[] R, G, B, A;
public ColorSL(Color[] colors)
{
if(colors == null) return;
R = new float[colors.Length];
G = new float[colors.Length];
B = new float[colors.Length];
A = new float[colors.Length];
for (int i = 0; i < colors.Length; i++)
{
R[i] = colors[i].r;
G[i] = colors[i].g;
B[i] = colors[i].b;
A[i] = colors[i].a;
}
}
public Color[] GetColors()
{
Color[] temp = new Color[R.Length];
for (int i = 0; i < temp.Length; i++)
{
temp[i] = new Color(R[i], G[i], B[i], A[i]);
}
return temp;
}
}
private ColorSL NegativeX;
private ColorSL NegativeY;
private ColorSL NegativeZ;
private ColorSL PositiveX;
private ColorSL PositiveY;
private ColorSL PositiveZ;
public CubemapFile(Cubemap temp)
{
GetPixelsAtCubemap(temp);
}
public void SetPixelsAtCubemap(Cubemap temp)
{
temp.SetPixels(NegativeX.GetColors(), CubemapFace.NegativeX);
temp.SetPixels(NegativeY.GetColors(), CubemapFace.NegativeY);
temp.SetPixels(NegativeZ.GetColors(), CubemapFace.NegativeZ);
temp.SetPixels(PositiveX.GetColors(), CubemapFace.PositiveX);
temp.SetPixels(PositiveY.GetColors(), CubemapFace.PositiveY);
temp.SetPixels(PositiveZ.GetColors(), CubemapFace.PositiveZ);
temp.Apply(true);
}
public void GetPixelsAtCubemap(Cubemap temp)
{
NegativeX = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
NegativeY = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
NegativeZ = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
PositiveX = new ColorSL(temp.GetPixels(CubemapFace.PositiveX));
PositiveY = new ColorSL(temp.GetPixels(CubemapFace.PositiveY));
PositiveZ = new ColorSL(temp.GetPixels(CubemapFace.PositiveZ));
}
}
public static void Save(Cubemap obj, string fileName)
{
FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
try
{
CubemapFile temp = new CubemapFile(obj);
formatter.Serialize(fs, temp);
}
catch (SerializationException e)
{
Debug.Log("Failed to serialize. Reason: " + e.Message);
throw;
}
finally
{
fs.Close();
}
}
public static Cubemap Load(Cubemap obj,string fileName)
{
if (!File.Exists(fileName + ".cubemap")) return null;
FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Open);
CubemapFile temp = null;
try
{
BinaryFormatter formatter = new BinaryFormatter();
temp = (CubemapFile)formatter.Deserialize(fs);
temp.SetPixelsAtCubemap(obj);
}
catch (SerializationException e)
{
Debug.Log("Failed to deserialize. Reason: " + e.Message);
throw;
}
finally
{
fs.Close();
}
return obj;
}
}