Назначение разных материалов разным сеткам на одном и том же объекте - PullRequest
0 голосов
/ 31 мая 2018

У меня изначально была функция, которая создавала прямоугольную сетку с заданной высотой / шириной:

void BoxMesh(float width, float height)
{
    MeshFilter mf = GetComponent<MeshFilter>();
    Mesh mesh = new Mesh();
    mf.mesh = mesh;

    //Verticies
    Vector3[] verticies = new Vector3[4]
    {
        new Vector3(0,0,0), new Vector3(0, height, 0), new Vector3(width, height, 0), new Vector3(width, 0, 0)
    };

    //Triangles
    int[] tri = new int[6];

    tri[0] = 0;
    tri[1] = 1;
    tri[2] = 3;

    tri[3] = 1;
    tri[4] = 2;
    tri[5] = 3;

    //normals

    Vector3[] normals = new Vector3[4];

    normals[0] = -Vector3.forward;
    normals[1] = -Vector3.forward;
    normals[2] = -Vector3.forward;
    normals[3] = -Vector3.forward;

    //UVs

    Vector2[] uv = new Vector2[4];

    uv[0] = new Vector2(0, 0);
    uv[1] = new Vector2(0, 1);
    uv[2] = new Vector2(1, 1);
    uv[3] = new Vector2(1, 0);



    //initialise
    mesh.vertices = verticies;
    mesh.triangles = tri;
    mesh.normals = normals;
    mesh.uv = uv;

    //setting up collider
    polyCollider.pathCount = 1;

    Vector2[] path = new Vector2[4]
    {
        new Vector2(0,0), new Vector2(0, height), new Vector2(width, height), new Vector2(width, 0)
    };

    polyCollider.SetPath(0, path);

}

Затем я решила, что хочу, чтобы эта сетка имела контур, поэтому я отредактировала функцию так, чтобы она была теперь:

void BoxMesh(float width, float height, float OLwidth)
{
    MeshFilter mf = GetComponent<MeshFilter>();
    Mesh mesh = new Mesh();
    mf.mesh = mesh;

    MeshFilter mfOL = GetComponent<MeshFilter>();
    Mesh meshOL = new Mesh();
    mfOL.mesh = meshOL;

    //Verticies
    Vector3[] verticies = new Vector3[4]
    {
        new Vector3(0,0,0), new Vector3(0, height, 0), new Vector3(width, height, 0), new Vector3(width, 0, 0)
    };

    //Verticies Outline
    Vector3[] verticiesOL = new Vector3[4]
    {
        new Vector3(-OLwidth,-OLwidth,0), new Vector3(-OLwidth, height + OLwidth, 0), new Vector3(width + OLwidth, height + OLwidth, 0), new Vector3(width + OLwidth, -OLwidth, 0)
    };

    //Triangles
    int[] tri = new int[6];

    tri[0] = 0;
    tri[1] = 1;
    tri[2] = 3;

    tri[3] = 1;
    tri[4] = 2;
    tri[5] = 3;

    //normals

    Vector3[] normals = new Vector3[4];

    normals[0] = -Vector3.forward;
    normals[1] = -Vector3.forward;
    normals[2] = -Vector3.forward;
    normals[3] = -Vector3.forward;

    //UVs

    Vector2[] uv = new Vector2[4];

    uv[0] = new Vector2(0, 0);
    uv[1] = new Vector2(0, 1);
    uv[2] = new Vector2(1, 1);
    uv[3] = new Vector2(1, 0);

    //initialise
    mesh.vertices = verticies;
    mesh.triangles = tri;
    mesh.normals = normals;
    mesh.uv = uv;

    meshOL.vertices = verticiesOL;
    meshOL.triangles = tri;
    meshOL.normals = normals;
    meshOL.uv = uv;

    //setting up collider
    polyCollider.pathCount = 1;

    Vector2[] path = new Vector2[4]
    {
        new Vector3(-OLwidth,-OLwidth,0), new Vector3(-OLwidth, height + OLwidth, 0), new Vector3(width + OLwidth, height + OLwidth, 0), new Vector3(width + OLwidth, -OLwidth, 0)
    };

    polyCollider.SetPath(0, path);

}

Итак, теперь у меня есть две сетки, одна за другой.Однако я хочу, чтобы материал снаружи имел другой материал: чтобы он выглядел как контур.

У меня есть эти два материала в моей сеткерендерер, так как мне назначить один материал для внешней сетки, а другой - для внутренней сетки.

1 Ответ

0 голосов
/ 01 июня 2018

Понятие, которое вы можете здесь упустить, это «SubMesh», каждая подсеть сетки будет отображаться с использованием материала из списка с заданным индексом.Чтобы создать вложенную сетку, вы можете позвонить

mesh.SetTriangles(int[] triangles, int submesh);

. Вы можете повторно использовать свои вершины, указав разные грани на основе одного и того же списка точек.Если вы указали больше вложенных элементов, чем материалов, оставшиеся вложенные элементы будут отображаться сплошным пурпурным цветом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...