Esempio n. 1
0
        private void ModelButtonClick(Button button)
        {
            var data = (Model)button.Data;
            var req  = new JesusWebRequest(ServerUrl.Url, "Model/Detail?id=" + data.Id);

            req.SendWait();
            var jsonData = req.GetResponsePart <ResponseJsonModel>("JsonData");
            var meshData = req.GetResponsePart <Stream>("ModelData");

            if (jsonData == null)
            {
                Debug.LogError("Response json is null");
                return;
            }

            if (meshData == null)
            {
                Debug.LogError("Response mesh is null");
                return;
            }

            var mesh = UnityBinaryMesh.GetMesh(meshData);

            mesh.name = "FromServer: " + data.ModelFile.Id + (data.Name != null ? " - " + data.Name : "");

            var newGo = new GameObject(mesh.name);
            //	Func<UnityEngine.Material> getNewMat = () => new UnityEngine.Material(Shader.Find("IdMei/WorldSpaceMix"));
            Func <UnityEngine.Material> getNewMat = () => new UnityEngine.Material(Shader.Find("Standard"));
            var matList = new List <UnityEngine.Material>();

            for (int i = 0; i < jsonData.Submeshes.Count; i++)
            {
                var subMesh  = jsonData.Submeshes[i];
                var material = jsonData.Materials[i];
                var newMat   = getNewMat();

                // transfer properties

                matList.Add(newMat);
            }


            newGo.AddComponent <MeshRenderer>().materials = matList.ToArray();
            newGo.AddComponent <MeshFilter>().mesh        = mesh;
            Undo.RegisterCreatedObjectUndo(newGo, "Object download");
            Selection.objects = new Object[] { newGo };
        }
Esempio n. 2
0
        private void ModelFieldOnChange(GameObject gameObject)
        {
            // make db model
            var model = new Model {
                Name         = gameObject.name,
                ModelCreator = new ModelCreator {
                    Name = Login.GetGlobal().Username
                }
            };
            var modelFile = model.ModelFile = new ModelFile();

            model.ModelFile = modelFile;

            var meshRenderers = gameObject.GetComponentInChildren <MeshRenderer>();
            var meshFilters   = gameObject.GetComponentInChildren <MeshFilter>();
            var mesh          = meshFilters.sharedMesh;
            var submeshes     = meshFilters.sharedMesh.subMeshCount;

            modelFile.Name         = mesh.name;
            modelFile.BinaryStream = UnityBinaryMesh.GetMeshBinary(mesh);
            modelFile.Checksum     = Crc32.Checksum(modelFile.BinaryStream);

            var materials = meshRenderers.sharedMaterials.Select(p => new MaterialConverter(p).GetDbMaterial()).ToArray();

            var dataSubmeshes = materials.Select((p, i) => new SubMesh {
                Material   = p,
                Channel    = i,
                OwnerModel = model,
            });

            var textures = materials.SelectMany(p => new[] {
                p.MapAlbedo,
                p.MapNormal,
                p.MapOcclusion,
                p.MapSmooth,
                p.MapMetal,
                p.MapHeight,
                p.MapEmissive
            }).Where(p => p != null).ToArray();

            _previewDataStruct.Content = string.Format(
                "Model: {0}\n" +
                "FileSize: {1}kb\n" +
                "SubMeshes: {2}\n" +
                "Materials: {3}\n" +
                "Textures: {4}\n",
                model,
                Math.Round(modelFile.BinaryStream.Length / 1024f),
                dataSubmeshes.Count(),
                materials.Count(),
                string.Join("", textures.Select(p => "\n\t" + p.Name).ToArray())
                );


            Func <Stream, byte[]> getBytes = p => {
                p.Seek(0, SeekOrigin.Begin);
                var binaryReader = new BinaryReader(p);
                return(binaryReader.ReadBytes((int)p.Length));
            };

            Thread.Sleep(500);

            var newForm = new WWWForm();

            for (var i = 0; i < textures.Length; i++)
            {
                newForm.AddBinaryData("texture[" + i + "]", getBytes(textures[i].BinaryStream), textures[i].Name,
                                      "application/octet-stream");
            }
            newForm.AddBinaryData("modelFile", getBytes(modelFile.BinaryStream), "modelFile", "application/octet-stream");

            newForm.AddBinaryData("jsonData", Encoding.UTF8.GetBytes(Json.Serialize(new{
                textures,
                materials,
                Submeshes = dataSubmeshes,
                model,
                materialTags = _tagsWrapper.CheckedTags.Select(p => p.Id)
            })), "jsonData", "application/json");

            _formData = newForm;

            _uploadButton.Hidden = false;
        }