Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Mesh creado mediante codigo no actualiza

Iniciado por Jose134, Abril 26, 2016, 09:49:35 PM

Tema anterior - Siguiente tema
Abril 26, 2016, 09:49:35 PM Ultima modificación: Abril 26, 2016, 09:57:04 PM por Jose134
Hola gente de UnitySpain, hace siglos que no me paso por aqui y hoy me ha surgido un problema que no he conseguido arreglar de ninguna manera. Como siempre sera algo muy simple pero no lo veo xD Estaba intentando hacer un Mesh el cual se pudiera transformar de triangulo a cuadrado pero al actualizar el mesh del MeshFilter no hace nada, se queda triangulo aunque le diga que pase a ser un cuadrado :'(Os dejo el codigo completo (aunque se que no es un codigo muy agradable de leer xD)
using UnityEngine;
using System.Collections;

public class TriangleToSquare : MonoBehaviour {

    private MeshFilter mf;
    private Mesh mesh;

    public bool setTriangle;
    public bool setSquare;

    void Awake ()
    {
        mf = GetComponent<MeshFilter>();
        mesh = new Mesh();
    }

    void Start ()
    {
        mesh = InitialMesh();
        mf.mesh = mesh;
    }

    void Update ()
    {
        if (setTriangle)
        {
            Mesh newMesh = SetTriangle();
            mf.mesh = newMesh;

            setTriangle = false;
        }
        if (setSquare)
        {
            Mesh newMesh = SetSquare();
            mf.mesh = newMesh;

            setSquare = false;
        }    
    }

    private Mesh InitialMesh ()
    {
        Mesh newMesh = new Mesh();
        newMesh.name = "EditableMesh_Triangle";

        newMesh.vertices = new Vector3[]
        {
            new Vector3(0.5f, 1f, 0f),   //A - 0
            new Vector3(0f, 0f, 0f),     //B - 1
            new Vector3(1f, 0f, 0f),     //C - 2
            new Vector3(0.75f, 0.5f, 0f) //D - 3
        };
        newMesh.triangles = new int[]
        {
            3, 1, 0,
            3, 2, 1
        };
        newMesh.normals = new Vector3[]
        {
            -Vector3.forward,
            -Vector3.forward,
            -Vector3.forward,
            -Vector3.forward
        };
        newMesh.uv = new Vector2[]
        {
            new Vector2(0, 1),
            new Vector2(0, 0),
            new Vector2(1, 0),
            new Vector2(1, 1)
        };

        return newMesh;
    }

    private Mesh SetTriangle()
    {
        Mesh m = InitialMesh();

        m.name = "EditableMesh_Triangle";
        m.vertices[0] = new Vector3(0.5f, 1f, 0f);
        m.vertices[3] = new Vector3(0.75f, 0.5f, 0f);
       
        return m;
    }
    private Mesh SetSquare ()
    {
        Mesh m = InitialMesh();

        m.name = "EditableMesh_Square";
        m.vertices[0] = new Vector3(0, 1, 0);
        m.vertices[3] = new Vector3(1, 0, 0);
       
        return m;
    }
   
}
 Muchas gracias por vuestra ayuda [EDIT]Os adjunto esta foto por si sirve de algo, es un dibujito que hice mientras pensaba como hacer esto (disculpad la calidad, no se enfocar bien con mi telefono)

Abril 26, 2016, 10:21:35 PM #1 Ultima modificación: Abril 26, 2016, 10:22:00 PM por kaito
Algo parecido me paso con otra matriz, la de color de vértices.No se pueden modificar las matrices de vertices, triángulos, normales, color, etc... directamente.Es necesario crear una nueva matriz o clon de la existente, modificarla, y asignarla.
   private Mesh SetTriangle()
{
   Mesh m = InitialMesh();
   
   m.name = "EditableMesh_Triangle";
   Vector3[] vertices = (Vector3[])m.vertices.Clone();
   vertices[0] = new Vector3(0.5f, 1f, 0f);
   vertices[3] = new Vector3(0.75f, 0.5f, 0f);
   m.vertices = vertices;

   return m;
}
private Mesh SetSquare ()
{
   Mesh m = InitialMesh();
   
   m.name = "EditableMesh_Square";
   Vector3[] vertices = (Vector3[])m.vertices.Clone();
   vertices[0] = new Vector3(0, 1, 0);
   vertices[3] = new Vector3(1, 0, 0);
   m.vertices = vertices;
   
   return m;
}
 

Cita de: kaito date=1461702095" data-ipsquote="" data-cite="kaito" class="ipsQuote">Algo parecido me paso con otra matriz, la de color deurl="//xn--vrtices-bya.no"]vértices.No[/url] se pueden modificar las matrices de vertices, triángulos, normales, color, etc... directamente.Es necesario crear una nueva matriz o clon de la existente, modificarla, y asignarla.
   private Mesh SetTriangle(){
   Mesh m = InitialMesh();
   
   m.name = "EditableMesh_Triangle";
   Vector3[] vertices = (Vector3[])m.vertices.Clone();
   vertices[0] = new Vector3(0.5f, 1f, 0f);
   vertices[3] = new Vector3(0.75f, 0.5f, 0f);
   m.vertices = vertices;

   return m;
}
private Mesh SetSquare ()
{
   Mesh m = InitialMesh();
   
   m.name = "EditableMesh_Square";
   Vector3[] vertices = (Vector3[])m.vertices.Clone();
   vertices[0] = new Vector3(0, 1, 0);
   vertices[3] = new Vector3(1, 0, 0);
   m.vertices = vertices;
   
   return m;
}
 
Muchisimas gracias, ahora he podido arreglarlo y ademas añadi una transicion 
private Vector3[] SetTriangle()
    {
        Vector3[] vertices = mf.mesh.vertices;

        vertices[0] = Vector3.Lerp(vertices[0], new Vector3(0.5f, 1f, 0f), 10 * Time.deltaTime);
        vertices[3] = Vector3.Lerp(vertices[3], new Vector3(0.75f, 0.5f, 0f), 10 * Time.deltaTime);

        return vertices;
    }
    private Vector3[] SetSquare ()
    {
        Vector3[] vertices = mf.mesh.vertices;
       
        vertices[0] = Vector3.Lerp(vertices[0], new Vector3(0, 1, 0), 10 * Time.deltaTime);
        vertices[3] = Vector3.Lerp(vertices[3], new Vector3(1, 1, 0), 10 * Time.deltaTime);

        return vertices;
    }
 

Etiquetas: