public static Mesh GetCacheItem(string url) { string path = Path.Combine(Application.persistentDataPath, url); if (File.Exists(path) == true) { byte[] bytes = File.ReadAllBytes(path); return(MeshSerializer.ReadMesh(bytes)); } return(null); }
void CreateMesh() { Debug.Log("CreateMesh"); int index = 0; foreach (byte[] mesh in meshDic.Values) { GameObject tempObj = Instantiate(this.originMesh, transform); tempObj.GetComponent <MeshFilter>().sharedMesh = MeshSerializer.ReadMesh(mesh); tempObj.GetComponent <MeshCollider>().sharedMesh = MeshSerializer.ReadMesh(mesh); tempObj.name = string.Format("Mesh {0}", index++); } }
public static GameObject ReadAssetFromDisk(string filePath, string alternativeName) { var bin = File.ReadAllBytes(filePath); Mesh m = MeshSerializer.ReadMesh(bin); GameObject g = new GameObject(System.IO.Path.GetFileNameWithoutExtension(filePath)); if (!string.IsNullOrEmpty(alternativeName)) { g.name = alternativeName; } var mf = g.AddComponent <MeshFilter>(); mf.sharedMesh = m; var coll = g.AddComponent <MeshCollider>(); coll.sharedMesh = m; g.AddComponent <MeshRenderer>(); return(g); }
public static Mesh LoadMesh(string filename) { filename = filename.Replace(":", "-"); string path = Application.persistentDataPath + "/" + filename + ".mesh"; try { Byte[] bytes = System.IO.File.ReadAllBytes(path); return(MeshSerializer.ReadMesh(bytes)); } catch (Exception e) { if (verbose) { Debug.Log("Load Mesh Exception: " + e.Message); } } return(null); }
public void SetSdToObject() // load한 데이터를 오브젝트에 넣음 { gameObject.name = sd.mFurniture; gameObject.transform.position = sd.mPosition; gameObject.transform.rotation = sd.mRotation; gameObject.transform.localScale = Vector3.one; gameObject.transform.localScale = new Vector3( sd.mScale.x / gameObject.transform.lossyScale.x, sd.mScale.y / gameObject.transform.lossyScale.y, sd.mScale.z / gameObject.transform.lossyScale.z); if (gameObject.GetComponent <changeColor>() != null) { gameObject.GetComponent <changeColor>().Start(); gameObject.GetComponent <changeColor>().SetColor(sd.mColor); } if (gameObject.GetComponent <MeshFilter>() != null) { gameObject.GetComponent <MeshFilter>().mesh = MeshSerializer.ReadMesh(sd.mesh); } }
public void LoadChunk(int x, int y) { //if chunk has already been initialised, return or set active if not active if (GameObject.Find("chunk: " + x + ", " + y)) { if (GameObject.Find("chunk: " + x + ", " + y).activeSelf) { return; } GameObject.Find("chunk: " + x + ", " + y).SetActive(true); } //chunk gameobject setup GameObject newChunk = MakeChunk(x, y); Mesh chunkMesh = new Mesh(); chunkMesh.name = x + ", " + y; // loading a chunk mesh, if not found a new one is generated string path = Path.Combine(Application.persistentDataPath, x + ", " + y); if (File.Exists(path) == true) { byte[] bytes = File.ReadAllBytes(path); chunkMesh = MeshSerializer.ReadMesh(bytes); } else { chunkMesh = GenerateChunk(x, y, chunkSize, magnitude, frequency); } chunkMesh.RecalculateNormals(); newChunk.GetComponent <MeshFilter>().mesh = chunkMesh; newChunk.GetComponent <MeshCollider>().sharedMesh = chunkMesh; newChunk.GetComponent <MeshRenderer>().material = chunkMat; }
void Update() { string path = "Assets/Resources/Meshes/"; Mesh mesh = MeshSerializer.ReadMesh(File.ReadAllBytes(path + fileName)); if (mesh && !meshLoaded) { Debug.LogError("Mesh loaded"); meshLoaded = true; MeshFilter meshFilter = GetComponent <MeshFilter>(); if (!meshFilter) { meshFilter = gameObject.AddComponent <MeshFilter>(); gameObject.AddComponent <MeshRenderer>(); GetComponent <Renderer>().material.color = Color.red; } meshFilter.mesh = mesh; } else if (!mesh) { Debug.LogError("Failed to load mesh"); return; } }
public VesselControl.Vessel DrawVessel(MemoryBridge memoryBridge, Material drawMat, string vesselName) { VesselControl.Vessel newVessel; this.memoryBridge = memoryBridge; this.vesselName = vesselName; var binFormatter = new BinaryFormatter(); var mStream = new MemoryStream(); meshList = new List <Mesh>(); parts = new List <Part>(); // partList = new List<VesselPart>(); var vesselObject = new GameObject(); vesselObject.name = vesselName; vessel = vesselObject.transform; vessel.SetParent(transform); vessel.position = Vector3.zero; vessel.localEulerAngles = Vector3.zero; //DebugVector.DrawVector(vessel); var modelObject = new GameObject(); modelObject.name = "Vessel Offset"; vesselOffset = modelObject.transform; vesselOffset.SetParent(vessel); vesselOffset.position = Vector3.zero; vesselOffset.localEulerAngles = Vector3.zero; if (vesselFile == null) { vesselFile = MemoryMappedFile.Open(MapAccess.FileMapAllAccess, "VesselFile" + memoryBridge.fileName); } if (vesselFile == null) { Debug.Log("file is null"); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #endif } int byteCount = 0; int partCount = 0; using (Stream mapStream = vesselFile.MapView(MapAccess.FileMapAllAccess, 0, 8)) { var totalByteBuffer = new byte[4]; var partCountBuffer = new byte[4]; mapStream.Read(totalByteBuffer, 0, 4); mapStream.Read(partCountBuffer, 0, 4); byteCount = BitConverter.ToInt32(totalByteBuffer, 0); partCount = BitConverter.ToInt32(partCountBuffer, 0); } using (Stream mapStream = vesselFile.MapView(MapAccess.FileMapAllAccess, 0, byteCount)) { mapStream.Position = 8; for (int i = 0; i < partCount; i++) { List <MeshRenderer> meshRenderers = new List <MeshRenderer>(); //part unique id var totalpartBuffer = new byte[4]; mapStream.Read(totalpartBuffer, 0, 4); var uniqueID = BitConverter.ToSingle(totalpartBuffer, 0); //parent unique id totalpartBuffer = new byte[4]; mapStream.Read(totalpartBuffer, 0, 4); var parentUniqueID = BitConverter.ToSingle(totalpartBuffer, 0); //filter count totalpartBuffer = new byte[4]; mapStream.Read(totalpartBuffer, 0, 4); var filterCount = BitConverter.ToSingle(totalpartBuffer, 0); GameObject newPart = new GameObject(); var newPartObject = newPart.AddComponent(typeof(Part)) as Part; Vector3 vesselPartOffset = Vector3.zero; var tempBuffer = new Byte[4]; mapStream.Read(tempBuffer, 0, 4); vesselPartOffset.x = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); vesselPartOffset.y = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); vesselPartOffset.z = BitConverter.ToSingle(tempBuffer, 0); newPart.transform.localPosition = vesselPartOffset; //rot offset Vector3 vesselPartRotOffset = Vector3.zero; tempBuffer = new Byte[4]; mapStream.Read(tempBuffer, 0, 4); vesselPartRotOffset.x = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); vesselPartRotOffset.y = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); vesselPartRotOffset.z = BitConverter.ToSingle(tempBuffer, 0); newPart.transform.localEulerAngles = vesselPartRotOffset; //part name mapStream.Read(tempBuffer, 0, 4); var stringByteLength = BitConverter.ToSingle(tempBuffer, 0); var stringBuffer = new byte[(int)stringByteLength]; mapStream.Read(stringBuffer, 0, stringBuffer.Length); newPartObject.kspPartName = ASCIIEncoding.ASCII.GetString(stringBuffer); GameObject meshObjects = new GameObject(); meshObjects.name = "Mesh Objects"; newPartObject.partMeshes = meshObjects; meshObjects.transform.SetParent(newPart.transform); meshObjects.transform.localEulerAngles = Vector3.zero; for (int k = 0; k < filterCount; k++) { //Debug.Log("start writing filter at " + mapStream.Position); var newMesh = Instantiate(Resources.Load("BlankPart", typeof(GameObject))) as GameObject; newMesh.transform.SetParent(newPart.transform); meshRenderers.Add(newMesh.GetComponent <MeshRenderer>()); newMesh.GetComponent <MeshRenderer>().material = drawMat; Vector3 posVector = Vector3.zero; tempBuffer = new Byte[4]; mapStream.Read(tempBuffer, 0, 4); posVector.x = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); posVector.y = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); posVector.z = BitConverter.ToSingle(tempBuffer, 0); newMesh.transform.localPosition = posVector; var localEuler = Vector3.zero; // tempBuffer = new Byte[4]; mapStream.Read(tempBuffer, 0, 4); localEuler.x = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); localEuler.y = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); localEuler.z = BitConverter.ToSingle(tempBuffer, 0); newMesh.transform.localEulerAngles = localEuler; Vector3 scaleVector = Vector3.zero; // tempBuffer = new Byte[4]; mapStream.Read(tempBuffer, 0, 4); scaleVector.x = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); scaleVector.y = BitConverter.ToSingle(tempBuffer, 0); mapStream.Read(tempBuffer, 0, 4); scaleVector.z = BitConverter.ToSingle(tempBuffer, 0); newMesh.transform.localScale = scaleVector; var lengthBuffer = new Byte[4]; mapStream.Read(lengthBuffer, 0, 4); var byteMeshLength = BitConverter.ToSingle(lengthBuffer, 0); var meshBuffer = new Byte[(int)byteMeshLength]; mapStream.Read(meshBuffer, 0, (int)byteMeshLength); newMesh.GetComponent <MeshFilter>().mesh = MeshSerializer.ReadMesh(meshBuffer); //not sure why this doesnt work up top, but too lazy to figure it out newMesh.transform.SetParent(meshObjects.transform); } newPartObject.CustomAwake((int)uniqueID, (int)parentUniqueID, vesselName, meshRenderers); parts.Add(newPartObject); } } newVessel.transform = vessel; newVessel.parts = parts; newVessel.meshOffset = vesselOffset; foreach (var part in newVessel.parts) { part.vessel = newVessel; part.FindParent(); } return(newVessel); }
private void OnDeserialized() { //So, we need to mod a little bit bool av = true; try { //First, try to know if the data come from Editor Vector3[] v = vertices; if (v.Length == 0) { av = false; } } catch { //If it's from Editor nothing wouldn't be stored, so we have to take action in it... av = false; // vv As we saved it before in GameObject_DirectConvert, we can restore it safely! } Mesh mesh = new Mesh(); if (av) { mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uv; mesh.uv2 = uv1; mesh.uv2 = uv2; mesh.colors = colors; mesh.tangents = tangents; mesh.subMeshCount = subMeshCount; for (var i = 0; i < subMeshCount; ++i) { mesh.SetTriangles(triangles[i], i); } mesh.RecalculateBounds(); if (filter != null) { filter.mesh = mesh; } else if (skinnedMeshRenderer != null) { skinnedMeshRenderer.sharedMesh = mesh; } } else { //If it's from Editor nothing wouldn't be stored, so we have to take action in it... byte[] b = SerializerHelpers.LoadAsset("Mesh/" + LevelLoader.Current.Last.name + ".asset"); if (b == null) { Debug.LogErrorFormat("{0} mesh couldn't be loaded.", LevelLoader.Current.Last.name); return; } mesh = MeshSerializer.ReadMesh(b); //As we saved it before in GameObject_DirectConvert, we can restore it safely! if (mesh == null) { Debug.LogFormat("{0} couldn't be rebuilt.", LevelLoader.Current.Last.name); return; } } if (filter != null) { filter.mesh = mesh; } else if (skinnedMeshRenderer != null) { skinnedMeshRenderer.sharedMesh = mesh; } }