public static void CreateMapInfo(UnityEngine.Object[] sprites, string savepath) { CharInfoA[] tmp = new CharInfoA[16]; for (int i = 0; i < 16; i++) { tmp[i] = new CharInfoA(); tmp[i].len = i + 1; } CharUV uv = new CharUV(); unsafe { fixed(byte *bp = &buff[0]) { for (int i = 0; i < sprites.Length; i++) { var sp = sprites[i] as Sprite; if (sp != null) { int len = AddSpriteInfo(sp); var dat = tmp[len - 1].dat; char *cp = (char *)bp; for (int j = 0; j < len; j++) { dat.Add(*cp); cp++; } CalculUV(sp.rect, sp.texture.width, sp.texture.height, ref uv); tmp[len - 1].uvs.Add(uv); } } } } DataBuffer db = new DataBuffer(); FakeStruct fake = new FakeStruct(db, 16); for (int i = 0; i < 16; i++) { var t = tmp[i]; FakeStruct fs = new FakeStruct(db, 3); fs[0] = t.len; if (tmp[i].dat.Count > 0) { fs[1] = db.AddArray <char>(t.dat.ToArray()); fs[2] = db.AddArray <CharUV>(t.uvs.ToArray()); } fake.SetData(i, fs); } db.fakeStruct = fake; byte[] data = db.ToBytes(); File.WriteAllBytes(savepath, data); Debug.Log("emoji info create done"); }
static void CalculUV(Rect sr, float w, float h, ref CharUV uv) { float x = sr.x; float rx = sr.width + x; float y = sr.y; float ty = sr.height + y; x /= w; rx /= w; y /= h; ty /= h; uv.uv0.x = x; uv.uv0.y = ty; uv.uv1.x = rx; uv.uv1.y = ty; uv.uv2.x = rx; uv.uv2.y = y; uv.uv3.x = x; uv.uv3.y = y; }