public static void CacheItem(string url, Mesh mesh)
    {
        string path = Path.Combine(Application.persistentDataPath, url);

        byte[] bytes = MeshSerializer.WriteMesh(mesh, true);
        File.WriteAllBytes(path, bytes);
    }
    public void SaveChunk(Mesh mesh)
    {
        string path = Path.Combine(Application.persistentDataPath, "chunkData/" + mesh.name);

        byte[] bytes = MeshSerializer.WriteMesh(mesh, true);
        File.WriteAllBytes(path, bytes);
    }
Example #3
0
    // Use this for initialization
    public byte[]  SaveMesh()
    {
        Mesh   inputMesh    = GetComponent <MeshFilter>().mesh;
        string fullFileName = Application.dataPath + "/" + fileName;

        feedSave = MeshSerializer.WriteMesh(inputMesh, saveTangents);
        print("Saved " + name + " mesh to " + fullFileName);


        return(feedSave);
    }
Example #4
0
    public void sendSpatialMesh(Mesh mesh)
    {
        //PointsMessage message = new PointsMessage();
        //message.vertices = vertices;
        //message.uvs = uvs;
        //message.triangles = triangles;
        //myClient.Send(SpatialMeshMsg.meshMsg, message);

        var data = MeshSerializer.WriteMesh(mesh, true);

        photonView.RPC("TransferMesh", PhotonTargets.All, SpatialMeshMsg.meshMsg, data);
    }
Example #5
0
    //public void sendMessage(Vector3[] vertices, Vector2[] uvs, int[] triangles)
    public void sendMessage(Mesh mesh)
    {
        //PointsMessage message = new PointsMessage();
        //message.vertices = vertices;
        //message.uvs = uvs;
        //message.triangles = triangles;
        //NetworkServer.SendToAll(CustomMessage.hiMessage, message);

        var data = MeshSerializer.WriteMesh(mesh, true);

        photonView.RPC("TransferMesh", PhotonTargets.All, CustomMessage.hiMessage, data);
    }
Example #6
0
    public void SetCurrentState() // 현재상태 불러오기
    {
        sd.mFurniture = gameObject.name;
        sd.mPosition  = gameObject.transform.position;
        sd.mRotation  = gameObject.transform.rotation;
        sd.mScale     = gameObject.transform.lossyScale;

        if (gameObject.GetComponent <changeColor>() != null)
        {
            sd.mColor = gameObject.GetComponent <changeColor>().GetColor();
        }
        if (gameObject.GetComponent <MeshFilter>() != null)
        {
            sd.mesh = MeshSerializer.WriteMesh(gameObject.GetComponent <MeshFilter>().mesh, true);
        }
    }
Example #7
0
    { //With help of: https://dzone.com/articles/convert-object-byte-array-and, FullSerializer, SerializeHelper
        protected override fsResult DoSerialize(GameObject model, Dictionary <string, fsData> serialized)
        {
            var result = fsResult.Success;

            if (model.hideFlags != HideFlags.None)
            {
                model.hideFlags = HideFlags.None;
            }

            if (!model.GetComponent <MeshRenderer>().enabled)
            {
                model.GetComponent <MeshRenderer>().enabled = true;
            }

            GameObject go = Object.Instantiate(model);

            go.name = model.name;

            //We should check for Editing Mode (because it's only required if we are serializing the desried GameObject in Editor),
            //but, why? It's more safe and more slow :) (This remember me to PHP haha)
            GameObject foundGo = null;
            Mesh       mesh    = PluginsHelper.FindMesh(go, ref foundGo);

            if (mesh != null)
            {
                MeshSerializer.WriteMesh(mesh, true).SaveAsAsset(mesh, foundGo.name);
            }

            byte[] bytes = go.SaveObjectTree();
            string path  = bytes.SaveAsAsset(go, go.name);

            if (Application.isPlaying)
            {
                Object.Destroy(go);
            }
            else
            {
                Object.DestroyImmediate(go);
            }

            result += SerializeMember(serialized, null, "path", path);

            return(result);
        }
Example #8
0
    public static void Bundle(string[] inputFiles, string outputFile)
    {
        AssetDatabase.Refresh();
        Debug.Log(string.Format("Bundling output: {0}", outputFile));
        Debug.Log(string.Join(", ", inputFiles));
        //UnityEngine.Object[] allAssets = inputFiles.SelectMany(f=>AssetDatabase.LoadAllAssetsAtPath(f,typeof(UnityEngine.Object)).ToList()).Where (f=>f is Mesh).ToArray();
        UnityEngine.Mesh[] meshes = inputFiles.Select(f => AssetDatabase.LoadAssetAtPath(Path.Combine("Assets", f), typeof(Mesh)) as Mesh).Where(m => m != null).ToArray();

        if (meshes.Length == 0)
        {
            throw new UnityException("No meshes found to process!");
        }

        /*
         * List<Mesh> meshes = new List<Mesh>();
         *
         * foreach( string file in inputFiles ){
         *      var objects = AssetDatabase.LoadAssetAtPath("Assets/"+file,typeof(MeshFilter));
         *      Debug.Log ( string.Join(", ",objects.Select(o=>o.name).ToArray() ) );
         * }
         */



        foreach (Mesh mesh in meshes)
        {
            Debug.Log(string.Format("Serializing mesh {0}", outputFile));
            byte[] meshData = MeshSerializer.WriteMesh(mesh, true);
            File.WriteAllBytes(outputFile, meshData);
            break;
        }

        /*
         * BuildPipeline.BuildAssetBundle(allAssets[0],
         *                             allAssets,
         *                             outputFile,
         *                             BuildAssetBundleOptions.CollectDependencies |
         *                             BuildAssetBundleOptions.CompleteAssets |
         *                             BuildAssetBundleOptions.DeterministicAssetBundle,
         *                             BuildTarget.Android);
         */
    }
Example #9
0
 public static void SaveMesh(string filename, Mesh mesh)
 {
     filename = filename.Replace(":", "-");
     try
     {
         Byte[] bytes = MeshSerializer.WriteMesh(mesh, true);
         string path  = Application.persistentDataPath + "/" + filename + ".mesh";
         System.IO.File.WriteAllBytes(path, bytes);
         if (verbose)
         {
             Debug.Log("Mesh saved @ " + path);
         }
     }
     catch (System.Exception e)
     {
         if (verbose)
         {
             Debug.Log("Save Mesh Exception: " + e.Message);
         }
     }
 }
    public void sendSpatialMesh(Mesh mesh)
    {
        var data = MeshSerializer.WriteMesh(mesh, true);

        photonView.RPC("TransferMesh", PhotonTargets.All, SpatialMeshMsg.meshMsg, data);
    }
Example #11
0
    public static void SaveAssetToDisk(MeshFilter meshFilter, string filePath, string Extension)
    {
        var bin = MeshSerializer.WriteMesh(meshFilter.sharedMesh, true);

        File.WriteAllBytes(filePath, bin);
    }
Example #12
0
    //Vector3 CompareVectorPos(Vector3 a, Vector3 b, bool bMin)
    //{
    //    if (bMin)
    //    {
    //        if (a.x > b.x)
    //        {
    //            a.x = b.x;
    //        }
    //        if (a.y > b.y)
    //        {
    //            a.y = b.y;
    //        }
    //        if (a.z > b.z)
    //        {
    //            a.z = b.z;
    //        }
    //    }
    //    else
    //    {
    //        if (a.x < b.x)
    //        {
    //            a.x = b.x;
    //        }
    //        if (a.y < b.y)
    //        {
    //            a.y = b.y;
    //        }
    //        if (a.z < b.z)
    //        {
    //            a.z = b.z;
    //        }
    //    }

    //    return a;
    //}

    void CopyMesh()
    {
        if (tMapper != null)
        {
            int   lstIndex = 0;
            short index    = 0;

            Dictionary <short, byte[]> tempDic = new Dictionary <short, byte[]>();

            //GameObject cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
            //Mesh cubeMesh = cubeObj.GetComponent<MeshFilter>().sharedMesh;
            //Destroy(cubeObj);

            foreach (GameObject obj in tMapper.meshIdToGameObjectMap.Values)
            {
                Mesh tMesh = obj.GetComponent <MeshFilter>().sharedMesh;
                Destroy(obj);

                if (tMesh.vertices.Length == 0)
                {
                    continue;
                }

                //Vector3 min = new Vector3(999f, 999f, 999f);
                //Vector3 max = new Vector3(-999f, -999f, -999f);

                //for (int i = 0; i < tMesh.vertices.Length; i++)
                //{
                //    min = CompareVectorPos(min, tMesh.vertices[i], true);
                //    max = CompareVectorPos(max, tMesh.vertices[i], false);
                //}

                //Debug.Log(index+". Lenth " +tMesh.vertices.Length);

                //Vector3 center = tMesh.bounds.center;
                //Vector3 size = tMesh.bounds.size;
                //Vector3 min = tMesh.bounds.min;
                //Vector3 max = tMesh.bounds.max;
                //Vector3 edge1 = new Vector3(min.x,max.y,min.z);
                //Vector3 edge2 = new Vector3(max.x, min.y, max.z);

                ////obj.transform.position = center;
                ////obj.transform.localScale = size;

                ////tMesh = cubeMesh;

                //tMesh.Clear();
                //tMesh.SetVertices(new Vector3[] {min,edge1,edge2,max});
                //tMesh.SetUVs(0, new Vector2[] { Vector2.zero, Vector2.zero, Vector2.zero, Vector2.zero });
                //tMesh.SetTriangles(new int[] { 0, 1, 2, 3, 1, 2}, 0);
                //tMesh.RecalculateNormals();

                ////tMesh.Simplify(); //MeshSimplification.Simplify(tMesh);

                //Debug.LogError(index + ". Lenth " + tMesh.vertices.Length);

                if (tMesh.triangles.Length / 3 > 250)
                {
                    Debug.LogError(index + ". Tris " + tMesh.triangles.Length / 3);
                }

                tempDic.Add(index, MeshSerializer.WriteMesh(tMesh, false));


                index++;
                if (index > 100)
                {
                    meshDic.Add(tempDic);

                    tempDic = new Dictionary <short, byte[]>();
                    lstIndex++;
                    index = 0;
                }
            }

            meshDic.Add(tempDic);

            Debug.LogError("Create");
            iStep = 1;
            tMapper.transform.parent.gameObject.SetActive(false);

            if (SenderObj == null)
            {
                SenderObj = PhotonNetwork.Instantiate(this.tParent.name, Vector3.zero, Quaternion.identity, 0);
            }
        }
    }
        public MemoryPart(Part part, VesselControl vesselControl)
        {
            kspPart   = part;
            byteCount = 0;
            name      = part.name;
            uniqueID  = part.gameObject.GetInstanceID();
            try
            {
                parentID = part.parent.gameObject.GetInstanceID();
            }
            catch { Debug.Log(part.name + " does not have a parent"); }


            var modelMeshes = part.FindModelComponents <MeshFilter>();

            //var modelSkinnedMeshes = part.FindModelComponents<SkinnedMeshRenderer>();

            //  var combinedArray = new Mesh[modelMeshes.Count + modelSkinnedMeshes.Count];
            //  modelMeshes.CopyTo(combinedArray);
            offset = vesselControl.adjustedVessel.InverseTransformPoint(part.transform.position);//vesselControl.adjustedVessel.InverseTransformPoint(filter.transform.position);
            var tempParent = part.transform.parent;

            part.transform.SetParent(vesselControl.adjustedVessel);//vesselControl.vesselCOM);
            //  var rotOffset = Quaternion.Inverse(part.vessel.vesselTransform.rotation) * filter.transform.rotation;
            rotOffset = part.transform.localEulerAngles;

            part.transform.SetParent(tempParent);

            meshList = new List <ModelFilter>();

            //for uniqueID
            byteCount += 4;
            //for parent uniqueID
            byteCount += 4;
            //for meshfilter count
            byteCount += 4;
            //for localPosition vector3
            byteCount += 12;
            //for localRot vector3
            byteCount += 12;

            //for part name string count
            byteCount += 4;
            //for part name
            nameBytePackage = Encoding.ASCII.GetBytes(name);
            byteCount      += nameBytePackage.Length;


            foreach (var filter in modelMeshes)
            {
                Debug.Log(filter.transform.name + " filter found on part " + part.name);
                bool serialize = false;
                if (!filter.name.ToLower().Contains("col"))
                {
                    var gearModule = part.GetComponent <ModuleWheelBase>();
                    if (!gearModule)
                    {
                        serialize = true;
                    }
                }
                else
                {
                    var engineModule = part.GetComponent <ModuleEngines>();
                    if (engineModule)
                    {
                        serialize = true;
                    }
                }

                if (serialize)
                {
                    ModelFilter modelFilter = new ModelFilter();

                    byteCount += 12;
                    byteCount += 12;
                    byteCount += 12;

                    modelFilter.vesselPartOffset = part.transform.InverseTransformPoint(filter.transform.position); //vesselControl.adjustedVessel.InverseTransformPoint(filter.transform.position);
                    tempParent = filter.transform.parent;
                    filter.transform.SetParent(part.transform);                                                     //vesselControl.vesselCOM);
                    //  var rotOffset = Quaternion.Inverse(part.vessel.vesselTransform.rotation) * filter.transform.rotation;
                    modelFilter.vesselPartLocalEuler = filter.transform.localEulerAngles;
                    filter.transform.SetParent(tempParent);
                    modelFilter.lossyScale = filter.transform.lossyScale;

                    //for mesh length
                    byteCount += 4;

                    var mesh = filter.mesh;
                    modelFilter.byteArrMesh = MeshSerializer.WriteMesh(mesh, true);
                    meshList.Add(modelFilter);
                    byteCount += modelFilter.byteArrMesh.Length;
                }
            }


            //Texture2D texture = part.FindModelComponent<MeshRenderer>().material.GetTexture("_MainTex") as Texture2D;

            ////var tex = new Texture2D(texture.height, texture.width, TextureFormat.RGB24, false);
            ////Graphics.ConvertTexture(texture, tex);
            //Color32[] pix = texture.GetPixels32();
            //System.Array.Reverse(pix);
            //Texture2D destTex = new Texture2D(texture.width, texture.height);
            //destTex.SetPixels32(pix);
            //destTex.Apply();


            //byteArrTexture = destTex.GetRawTextureData();

            // byteCount = byteArrMesh.Length;// + byteArrTexture.Length;
            //  Debug.Log(part.name + " mesh byte length " + byteArrMesh.Length);
            //byteArrayList.Add(MeshSerializer.WriteMesh(mesh, true));
        }