using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; class RSDatLoader { public Mesh loadModel(Packet p) { int vertexCount = p.readInt(); int indexCount = p.readInt(); int normalCount = p.readInt(); int uvCount = p.readInt(); int colorCount = p.readInt(); List vertices = new List(); List indices = new List(); List normals = new List(); List uvs = new List(); List colors = new List(); int i = 0; while (i < vertexCount) { float v1, v2, v3; v1 = (float)p.readInt() / 1000.0f; v2 = (float)p.readInt() / 1000.0f; v3 = (float)p.readInt() / 1000.0f; vertices.Add(new Vector3(v1, v2, v3)); i += 3; } i = 0; while (i < indexCount) { indices.Add(p.readInt()); i += 1; } i = 0; while (i < normalCount) { float v1, v2, v3; v1 = (float)p.readInt() / 1000.0f; v2 = (float)p.readInt() / 1000.0f; v3 = (float)p.readInt() / 1000.0f; normals.Add(new Vector3(v1, v2, v3)); i += 3; } i = 0; while (i < uvCount) { float v1, v2; v1 = (float)p.readInt() / 1000.0f; v2 = (float)p.readInt() / 1000.0f; uvs.Add(new Vector2(v1, v2)); i += 2; } i = 0; while (i < colorCount) { float v1, v2, v3; v1 = (float)p.readInt() / 1000.0f; v2 = (float)p.readInt() / 1000.0f; v3 = (float)p.readInt() / 1000.0f; colors.Add(new Color(v1, v2, v3)); i += 3; } Mesh m = new Mesh(); m.SetVertices(vertices); m.SetColors(colors); m.SetNormals(normals); m.SetUVs(0, uvs.ToArray()); m.SetIndices(indices.ToArray(), MeshTopology.Triangles, 0); return m; } }