반응형
유니티 큐브의 정점의 개수를 출력하면 24개임을 알 수 있다.
큐브를 8개로 정점으로 만들면 어떻게 되는지 알아보자.
ProceduralCube8.cs는 정점을 8개만 만들고 나서 시계방향으로 각각의 면에 삼각형을 두 개씩 만들어주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class ProceduralCube8 : MonoBehaviour
{
Mesh mesh;
Vector3[] vertices;
int[] triangles;
void Start()
{
mesh = GetComponent<MeshFilter>().mesh;
setMeshData();
createProceduralMesh();
}
void setMeshData()
{
Vector3 v0 = new Vector3(+0.5f, +0.5f, +0.5f);
Vector3 v1 = new Vector3(-0.5f, +0.5f, +0.5f);
Vector3 v2 = new Vector3(-0.5f, -0.5f, +0.5f);
Vector3 v3 = new Vector3(+0.5f, -0.5f, +0.5f);
Vector3 v4 = new Vector3(-0.5f, +0.5f, -0.5f);
Vector3 v5 = new Vector3(+0.5f, +0.5f, -0.5f);
Vector3 v6 = new Vector3(+0.5f, -0.5f, -0.5f);
Vector3 v7 = new Vector3(-0.5f, -0.5f, -0.5f);
vertices = new Vector3[] {
v0, v1, v2, v3, v4, v5, v6, v7
};
triangles = new int[] {
0, 1, 3, 1, 2, 3,
1, 4, 2, 4, 7, 2,
4, 5, 7, 5, 6, 7,
5, 0, 6, 0, 3, 6,
5, 4, 0, 1, 0, 4,
3, 2, 6, 6, 2, 7
};
}
void createProceduralMesh()
{
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.RecalculateNormals();
}
}
빈 오브젝트에 아래와 같이 컴포넌트와 스크립트를 추가하자.
이제 실제 큐브와 비교해보자.
정점 하나가 면 3개의 노멀 벡터를 저장할 수 없기 때문에 라이팅 연산이 제대로 계산되지 않는 것을 알 수 있다.
따라서 유니티 큐브는 정점이 24개가 필요하다.
Unity Plus:
Unity Pro:
Unity 프리미엄 학습:
반응형
댓글