序列化自定义类后,文件大小异常大

我有一个脚本,可以将PNG中的像素信息转换为自定义类。 我的问题是源图像是512x512 @ 100kb,生成的二进制文件是4.6mb! 我在Tile []中最终得到的条目数是正确的(512x512),并且Tile仅包含4字节的信息,与源文件相同。我尝试用其他格式创建Texture2d,但没有任何变化。

这里是脚本,希望有人可以解释正在发生的事情。

using UnityEngine;
using System.Runtime.InteropServices;
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class MapDataScript : MonoBehaviour {
public static MapDataScript mds;
private string mapName = "testMap3";
private Texture2D levelBitmap;
private Color32[] levelColours;//holds all the colour data from the first PNG. .r=terrain 
.g=actor .b+.a = data address

[Serializable]
public class MapData
{
    public int width;
    public int height;
    public Tile[] tiles;
}
[Serializable]
public class Tile
{
    public byte terrain;
    public byte actor;
    public byte address1;
    public byte address2;
    //public byte grassheight;
}

private void Awake()
{
    mds = this;
}

void Start() {
    LoadPNG();
}

void LoadPNG()
{
    //PNG Loading
    byte[] imgData = File.ReadAllBytes(Application.dataPath + "/" + mapName + ".png");
    levelBitmap = new Texture2D(512,512,TextureFormat.RGBAFloat,false);
    levelBitmap.LoadImage(imgData);

    levelColours = levelBitmap.GetPixels32();
    Debug.Log("levelcolours.length: " + levelColours.Length);

    LoadMapDataFromArray(levelColours,levelBitmap.width,levelBitmap.height);

}

void LoadMapDataFromArray(Color32[] colours,int widthIn,int heightIn)
{

    MapData md = new MapData();
    md.width = widthIn;
    md.height = heightIn;
    md.tiles = new Tile[widthIn*heightIn];
    Debug.Log("color32[] length:" + colours.Length);

    for (int i = 0; i < colours.Length; i++)
    {
        Tile t = new Tile();
        t.terrain = (byte) colours[i].r ;
        t.actor = (byte)colours[i].g;
        t.address1 = (byte)colours[i].b;
        t.address2 = (byte)colours[i].a;
        md.tiles[i] = t;
    }
    Debug.Log("tiles added to data class: " + md.tiles.Length);

    SaveMapDataToFile(md);
}

void SaveMapDataToFile(MapData md)
{

    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Open(Application.dataPath + "/save.dat",FileMode.OpenOrCreate);
    //MapData m = new MapData();
    bf.Serialize(file,md);
    file.Close();


}

}

感谢男孩和女孩:)

csshcsjm 回答:序列化自定义类后,文件大小异常大

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3092438.html

大家都在问