블록을 만들어 보겠습니다
먼저 메쉬를 그리기 위해서는 점들의 좌표를 만들어줘야합니다
육면체의 점들의 좌표를 이렇게 정하겠습니다
0, 0, 0은 블록의 기준점입니다
육면체를 생성하는 방법은 면을 6번 생성하는 것 입니다
처음에는 점을 8개만 생성하고 triangle로만 이어서 생성하니까
uv가 이상하게 잡히더라구요
한 점이 3개의 면에 공유되기때문에 일어나는 문제였습니다
즉 0, 0, 0의 좌표가 속한 면이 아랫면인지 뒷면인지 오른쪽면인지 헷갈려서 일어나는 문제라고 하더라구요
유니티에서 기본제공하는 큐브놈도 정점이 6x4인걸 보아 이게 맞는 방법인것 같습니다
createface함수를 만들었습니다
기준점과 방향을 넣어주면 해당 방향으로 면을 생성하기 위한 좌표를 vertices에 넣어줍니다
사진에는 전후만있지만 밑에 상하좌우도 있습니다
중요한 점은 정점을 생성하는 방향이 똑같게 해야한다는 것입니다
그래야 triangle에 편하게 넣을 수 있습니다
vIndex는 정점 리스트의 count를 가져옵니다
즉 vIndex는 항상 우리가 직전에 생성한 첫번째 좌표를 가리킵니다
따라서 0번째좌표 1번째좌표 2번째좌표를 이어 삼각형을 만들 수 있고
0번째 2번째 3번째를 이어 삼각형을 만들 수 있습니다
마지막으로 uv를 넣어줍니다
정점을 생성한 순서대로 넣어줘야 하더라구요
그럼 이제 모든 방향으로 면을 만들어 큐브를 완성해보겠습니다
빈 메쉬를 생성하고 6방향으로 면을 만들어줍니다
그렇게 만든 면의 정보가 담겨있는 vertice, triangle, uv를 빈 메쉬에 넣고
bound와 normal을 계산해줍니다
바운드는 메쉬가 얼만큼의 공간을 차지하는지
노말은 법선벡터를 통해 빛과 반응하는 기능 뭐 어쩌구라고 합니다
그리고 메쉬필터에 우리가 만든 메쉬를 넣고 메쉬렌더러에서 적당한 머티리얼을 적용하면
(감동)
ai님이 도와줬어용
그런데 블렌더에서 uv맵으로 작업한뒤에 유니티로 내보내는건 안되는지?
제가 암것도 몰라서
@다른손잡이 이게 유니티에서 이렇게 스크립트로 블럭 만들어내고 하는게 너무 비효율적인 것 같아요 ;;
@ㅇㅇ 그래서 한번에 통째로 만들어서 객체 하나로 출력한다던데
복셀은 진짜 얼마 안 걸리니까 블렌더 배워보시는거 추천