스크립팅으로 일부 지형을 그리려합니다. 그러나 나는 이상한 결과를 얻었고 문제를 정확히 지적하지 못했습니다.스크립트로 지형 메쉬 그리기
Start
메서드에서 나는 초기 메쉬를 만들고 있습니다.
Vector3[] verts = new Vector3[mapWidth * mapHeight * 6];
Vector2[] uvs = new Vector2[mapWidth * mapHeight * 6];
int[] triangles = new int[mapWidth * mapHeight * 6];
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
verts[x * y * 6 + 0] = new Vector3(x, 0, y);
verts[x * y * 6 + 1] = new Vector3(x + 1, 0, y);
verts[x * y * 6 + 2] = new Vector3(x + 1, 0, y + 1);
verts[x * y * 6 + 3] = new Vector3(x, 0, y);
verts[x * y * 6 + 4] = new Vector3(x + 1, 0, y + 1);
verts[x * y * 6 + 5] = new Vector3(x, 0, y + 1);
uvs[x * y * 6 + 0] = new Vector2(0, 0);
uvs[x * y * 6 + 1] = new Vector2(1, 0);
uvs[x * y * 6 + 2] = new Vector2(1, 1);
uvs[x * y * 6 + 3] = new Vector2(0, 0);
uvs[x * y * 6 + 4] = new Vector2(1, 1);
uvs[x * y * 6 + 5] = new Vector2(0, 1);
for (int t = 0; t < 6; t++)
{
triangles[x * y * 6 + t] = x * y * 6 + 5 - t;
}
}
}
terrain.vertices = verts;
terrain.uv = uvs;
terrain.triangles = triangles;
terrain.RecalculateNormals();
메시를 그릴 때 나는 Graphics.DrawMesh(terrain, Vector3.zero, Quaternion.identity, mat, 1);
입니다. 재질 (매트)은 단순한 그리드 텍스처이며 제대로 작동하는 것 같습니다. 그러나 유니티는 겉보기에 무작위로 삼각형 커플을 그리지 않기로 결정했습니다.
하나면 0, 0, 0
에 있고, 각각은 동일한 형상을 렌더링 실행. 나는 10 x 10
모양을 그려야합니다. 결국 나는 어려운 모서리가 필요하기 때문에 중복 정점을 만들고 있습니다.
나는 그려지는 것으로 보이지만 잘못된 얼굴로 보입니다. – Programmer
@Programmer 아니요, 아래에서 살펴 보았습니다. 저는 그것들을 (삼각형 순서를 고르는) 모든 것을 그리기 때문에 모두 같은 방향으로 그려야합니다. – Madmenyo
나는 문제가 당신의 색인이라고 생각합니다. x = 0, y = 0에 대해 수동으로 계산을 수행 한 다음 x = 0, y = 1에 대해 수행하십시오. 정확히 0 일 때 0이 항상 있기 때문에 정확히 동일합니다. 왜 똑같은 이상한 모양의 idk를 출력할까요? - 각각의 실행이 동일하기 때문에 - 분명히 "무작위로"당신이 제안하는 것처럼, 그것은 당신이 요구하는 것과 정확히 같아 보입니다. 조금 도움이되기 위해서, 당신이 원하는 것은 x * y 대신에 (x + y * width)라고 생각합니다. – yes