示例#1
0
    private void CopyMeshFromSerializedMesh(Mesh targetMesh, SerializableMesh sMesh)
    {
        int[] triangles = targetMesh.triangles;
        tangentTemp = targetMesh.tangents;
        uv2Temp     = targetMesh.uv2;
        uv3Temp     = targetMesh.uv3;
        int l = tangentTemp.Length;

        for (int i = 0; i < l; i++)
        {
            tangentTemp[i].Set(
                sMesh._tangents[i].x,
                sMesh._tangents[i].y,
                sMesh._tangents[i].z,
                sMesh._tangents[i].w);

            uv2Temp[i].Set(
                sMesh._uv2[i].x,
                sMesh._uv2[i].y
                );

            uv3Temp[i].Set(
                sMesh._uv3[i].x,
                sMesh._uv3[i].y
                );
        }
        targetMesh.tangents = tangentTemp;
        targetMesh.uv2      = uv2Temp;
        targetMesh.uv3      = uv3Temp;
    }
示例#2
0
        private static AnimationMesh CreateMesh(SerializableMesh meshContent)
        {
            AnimationMesh mesh = new AnimationMesh(meshContent.name);

            AnimationVertex[] vertices = new AnimationVertex[meshContent.vertices.Length];

            for (int i = 0; i < vertices.Length; i++)
            {
                SerializableVertex vertexContent = meshContent.vertices[i];
                vertices[i] = new AnimationVertex
                {
                    position     = vertexContent.position,
                    normal       = vertexContent.normal,
                    texture      = vertexContent.texture,
                    blendweights = vertexContent.blendweights,
                    blendindices = vertexContent.blendindices
                };
            }

            mesh.SetIndices(meshContent.indices);
            mesh.SetVertices(vertices);
            mesh.SetTextureName(meshContent.textureName);

            return(mesh);
        }
示例#3
0
        private void ProcessGeometry(GeometryContent xnaGeometry)
        {
            // find and process the geometry's bone weights
            for (int i = 0; i < xnaGeometry.Vertices.Channels.Count; i++)
            {
                string channelName = xnaGeometry.Vertices.Channels[i].Name;
                string baseName    = VertexChannelNames.DecodeBaseName(channelName);

                if (baseName == "Weights")
                {
                    ProcessWeightsChannel(xnaGeometry, i, outputModel.skeleton);
                }
            }


            // retrieve the four vertex channels we require for CPU skinning. we ignore any
            // other channels the model might have.
            string normalName      = VertexChannelNames.EncodeName(Microsoft.Xna.Framework.Graphics.VertexElementUsage.Normal, 0);
            string texCoordName    = VertexChannelNames.EncodeName(Microsoft.Xna.Framework.Graphics.VertexElementUsage.TextureCoordinate, 0);
            string blendWeightName = VertexChannelNames.EncodeName(Microsoft.Xna.Framework.Graphics.VertexElementUsage.BlendWeight, 0);
            string blendIndexName  = VertexChannelNames.EncodeName(Microsoft.Xna.Framework.Graphics.VertexElementUsage.BlendIndices, 0);

            VertexChannel <Vector3> normals      = xnaGeometry.Vertices.Channels[normalName] as VertexChannel <Vector3>;
            VertexChannel <Vector2> texCoords    = xnaGeometry.Vertices.Channels[texCoordName] as VertexChannel <Vector2>;
            VertexChannel <Vector4> blendWeights = xnaGeometry.Vertices.Channels[blendWeightName] as VertexChannel <Vector4>;
            VertexChannel <Vector4> blendIndices = xnaGeometry.Vertices.Channels[blendIndexName] as VertexChannel <Vector4>;

            // create our array of vertices
            int triangleCount = xnaGeometry.Indices.Count / 3;

            SerializableVertex[] vertices = new SerializableVertex[xnaGeometry.Vertices.VertexCount];
            for (int i = 0; i < vertices.Length; i++)
            {
                vertices[i] = new SerializableVertex
                {
                    position     = xnaGeometry.Vertices.Positions[i],
                    normal       = normals[i],
                    texture      = texCoords[i],
                    blendweights = blendWeights[i],
                    blendindices = blendIndices[i]
                };
            }

            int[] indices = new int[xnaGeometry.Indices.Count];
            for (int i = 0; i < xnaGeometry.Indices.Count; i++)
            {
                indices[i] = xnaGeometry.Indices[i];
            }

            SerializableMesh mesh = new SerializableMesh();

            mesh.name        = string.Format("mesh_{0}_{1}", outputModel.meshList.Count, xnaGeometry.Name);
            mesh.textureName = GetTextureName(xnaGeometry);
            mesh.vertices    = vertices;
            mesh.indices     = indices;
            outputModel.meshList.Add(mesh);
        }
示例#4
0
    protected TreeObject(SerializationInfo info, StreamingContext context) : base(info, context)
    {
        type = (TreeType)info.GetValue(KEY_TYPE, typeof(TreeType));
        SerializableMesh sMesh = (SerializableMesh)info.GetValue(KEY_MESH, typeof(SerializableMesh));

        if (sMesh != null)
        {
            mesh = sMesh.toMesh();
        }
    }
示例#5
0
    private void SetPaintableObjects(GameObject[] paintableObjects, string sceneryObjPath)
    {
        BinaryFormatter bf = new BinaryFormatter();

        for (int i = 0; i < paintableObjects.Length; i++)
        {
            FileStream       file  = File.Open(sceneryObjPath + i.ToString() + ".gd", FileMode.Open);
            SerializableMesh sMesh = (SerializableMesh)bf.Deserialize(file);
            file.Close();

            Mesh mesh = paintableObjects[i].GetComponent <MeshFilter>().mesh;
            CopyMeshFromSerializedMesh(mesh, sMesh);
        }
    }
示例#6
0
    private void SaveSceneriesToDisk()
    {
        initializedSceneries.ForEach((sceneryName) =>
        {
            GameObject scenery       = GameObject.Find(sceneryName).transform.GetChild(0).gameObject;
            MeshFilter[] meshFilters = scenery.GetComponentsInChildren <MeshFilter>();

            BinaryFormatter bf = new BinaryFormatter();

            for (int i = 0; i < meshFilters.Length; i++)
            {
                Mesh mesh = meshFilters[i].mesh;
                SerializableMesh sMesh = new SerializableMesh(mesh.tangents, mesh.uv2, mesh.uv3);

                FileStream file = File.Create(Application.persistentDataPath + "/saved" + sceneryName + i.ToString() + ".gd");
                bf.Serialize(file, sMesh);
                file.Close();
            }
        });
    }
示例#7
0
    public static SerializableMesh SerializeMesh(Mesh mesh)
    {
        SerializableMesh sMesh = new SerializableMesh();

        sMesh.vertices  = SerializeVector3Array(mesh.vertices);
        sMesh.triangles = mesh.triangles;

        //Colors
        List <SerializableVector3> liste = new List <SerializableVector3>();

        foreach (var c in mesh.colors)
        {
            SerializableVector3 vec = new SerializableVector3();
            vec.x = c.r / 1f;
            vec.y = c.g / 1f;
            vec.z = c.b / 1f;
            liste.Add(vec);
        }
        sMesh.colors = liste.ToArray();
        return(sMesh);
    }
示例#8
0
    protected Chunk(SerializationInfo info, StreamingContext context)
    {
        if (info == null)
        {
            throw new ArgumentNullException("info");
        }
        x         = info.GetInt32(KEY_X);
        z         = info.GetInt32(KEY_Z);
        generated = info.GetBoolean(KEY_GENERATED);
        SerializableMesh sMesh = (SerializableMesh)info.GetValue(KEY_MESH, typeof(SerializableMesh));

        if (sMesh != null)
        {
            mesh = sMesh.toMesh();
        }
        objs = (List <MapObject>)info.GetValue(KEY_OBJECTS, typeof(List <MapObject>));
        for (int a = 0; a < objs.Count; a++)
        {
            objs [a].chunk = this;
        }
    }
示例#9
0
    Serializable Serialize(GameObject sObject)
    {
        Serializable output = new Serializable();
        CustomScript cs     = sObject.GetComponent <CustomScript>();

        for (int j = 0; j < cs.componentList.Length; j++)
        {
            /*Adds the Transform object for serialization*/
            if (cs.componentList[j].GetType().Name.Contains("Transform"))
            {
                Debug.Log("Added Transform");
                SerializableTransform sTransform = new SerializableTransform();
                sTransform.name     = "Transform";
                sTransform.position = cs.gameObject.transform.position;
                sTransform.rotation = cs.gameObject.transform.eulerAngles;
                sTransform.scale    = cs.gameObject.transform.localScale;
                output.components.Add(sTransform);
            }
            else if (cs.componentList[j].GetType().Name.Contains("Renderable"))
            {
                SerializableMesh sRenderable = new SerializableMesh();
                sRenderable.name = "Renderable";
                Renderable r = cs.gameObject.GetComponent <Renderable>();
                if (sRenderable != null)
                {
                    sRenderable.mesh      = r.data.mesh;
                    sRenderable.material  = r.data.material;
                    sRenderable.albedo    = r.data.albedo;
                    sRenderable.metal     = r.data.metal;
                    sRenderable.roughness = r.data.roughness;
                    sRenderable.normal    = r.data.normal;
                    sRenderable.height    = r.data.height;
                    sRenderable.ao        = r.data.ao;
                    sRenderable.emissive  = r.data.emissive;
                }
                output.components.Add(sRenderable);
            }
            else if (cs.componentList[j].GetType().Name.Contains("MeshFilter"))                /*Adds the MeshFilter object for serialization*/
            {
                Debug.Log("MeshRenderer Serialization is deprecated. It will probably be removed in a future update");
                //Debug.Log("Added MeshFilter");
                //SerializableMesh sMesh = new SerializableMesh();
                //sMesh.name = "MeshFilter";
                //MeshFilter mf = cs.gameObject.GetComponent<MeshFilter>();
                //MeshRenderer mr = cs.gameObject.GetComponent < MeshRenderer>();
                //sMesh.mesh = mf.sharedMesh.name;
                //sMesh.material = mr.sharedMaterial.name;
                //sMesh.castShadows = mr.shadowCastingMode == UnityEngine.Rendering.ShadowCastingMode.On;
                //output.components.Add(sMesh);
            }
            else if (cs.componentList[j].GetType().Name.Contains("MeshRenderer"))                /*Adds the MeshRenderer object for serialization*/
            {
                Debug.Log("MeshRenderer Serialization is deprecated. It will probably be removed in a future update");
                //    Debug.Log("Added MeshRenderer");
                //    SerializableMeshRenderer sMeshRenderer = new SerializableMeshRenderer();
                //    sMeshRenderer.name = "MeshRenderer";
                //    MeshRenderer mr = cs.gameObject.GetComponent<MeshRenderer>();
                //    sMeshRenderer.material = mr.sharedMaterial.name;
                //    sMeshRenderer.castShadows = mr.shadowCastingMode == UnityEngine.Rendering.ShadowCastingMode.On;

                //    output.components.Add(sMeshRenderer);
            }
            else if (cs.componentList[j].GetType().Name.Contains("Rigidbody"))                /*Adds the Rigidbody object for serialization */
            {
                Debug.Log("Added Rigidbody");
                SerializableRigidbody sRigidbody = new SerializableRigidbody();
                sRigidbody.name = "Rigidbody";
                Rigidbody rb = cs.gameObject.GetComponent <Rigidbody>();
                sRigidbody.mass        = rb.mass;
                sRigidbody.drag        = rb.drag;
                sRigidbody.angularDrag = rb.angularDrag;
                sRigidbody.useGravity  = rb.useGravity;
                sRigidbody.isKinematic = rb.isKinematic;
                sRigidbody.freezeXPos  = rb.constraints == RigidbodyConstraints.FreezePositionX;
                sRigidbody.freezeYPos  = rb.constraints == RigidbodyConstraints.FreezePositionY;
                sRigidbody.freezeZPos  = rb.constraints == RigidbodyConstraints.FreezePositionZ;
                sRigidbody.freezeXRot  = rb.constraints == RigidbodyConstraints.FreezeRotationX;
                sRigidbody.freezeYRot  = rb.constraints == RigidbodyConstraints.FreezeRotationY;
                sRigidbody.freezeZRot  = rb.constraints == RigidbodyConstraints.FreezeRotationZ;

                output.components.Add(sRigidbody);
            }
            else if (cs.componentList[j].GetType().Name.Contains("Collider"))                /*Adds the Collider object for serialization*/
            {
                Debug.Log("Added Collider");

                if (cs.gameObject.GetComponent <BoxCollider>())
                {
                    SerializableBoxCollider sBCollider = new SerializableBoxCollider();
                    sBCollider.name = "BoxCollider";
                    BoxCollider bc = cs.gameObject.GetComponent <BoxCollider>();
                    sBCollider.isTrigger = bc.isTrigger;
                    sBCollider.center    = bc.center;
                    sBCollider.size      = bc.size;
                    output.components.Add(sBCollider);
                }
                else if (cs.gameObject.GetComponent <SphereCollider>())
                {
                    SerializableSphereCollider sSCollider = new SerializableSphereCollider();
                    sSCollider.name = "SphereCollider";
                    SphereCollider sc = cs.gameObject.GetComponent <SphereCollider>();
                    sSCollider.isTrigger = sc.isTrigger;
                    sSCollider.center    = sc.center;
                    sSCollider.radius    = sc.radius;
                    output.components.Add(sSCollider);
                }
            }
            else
            {
                SerializableComponent Script = new SerializableComponent();
                string fName = cs.componentList[j].GetType().ToString();
                if (cs.componentList[j].GetType().ToString().Contains("UnityEngine."))
                {
                    Debug.Log(fName.Length);
                    Script.name = fName.Substring(12);
                }
                else
                {
                    Script.name = fName;
                }
                output.components.Add(Script);
            }
        }
        return(output);
    }