我有一个脚本,可以将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();
}
}
感谢男孩和女孩:)