-
Pentagon Balance UI 제작하기Unity/제로부터 구현 2024. 6. 7. 18:01728x90
캐릭터의 스텟을 받아와 오각형 밸런스 UI로 보여주기 위해 제작
* 이번에 제작한 오각형 밸런스 유아이는 월드 스페이스에서 사용되게 제작.
1. 캐릭터의 스테이터스 5가지를 받으면, 각 스테이터스를 최대 스테이터스로 나눠 0 ~ 1 사이의 값으로 만들기.
2. 오각형의 각 꼭지점 위치 계산하기
void CalculatePentagonVertices() { for (int i = 0; i < 5; i++) { float angle = (72 * i+18) * Mathf.Deg2Rad; // 72도씩 증가, 시작지점 18도 pentagonVertices[i] = new Vector3(Mathf.Cos(angle) * radius, Mathf.Sin(angle) * radius, 0f); } }
오각형을 만들 것이기 때문에 360을 5 로 나눠준 뒤 꼭지점을 가장 윗부분에 위치시키기 위해 18도에서 시작.
각도를 레디안 값으로 변환 후 코싸인을 사용해 각 꼭지점 위치를 구합니다.
3. 오각형의 각 꼭지점 위치와 0 ~ 1 사이의 값으로 만들어 놓은 스테이터스를 사용해 매쉬 생성
스테이터스에 따른 삼각형을 5개를 만들 것 입니다.
void CreatePentagonMesh() { Mesh mesh = new Mesh(); vertices = new Vector3[6]; // 5 + 1 (중심점) int[] triangles = new int[15]; // 중심점 vertices[0] = Vector3.zero; // 오각형의 꼭짓점 for (int i = 0; i < 5; i++) { vertices[i + 1] = pentagonVertices[i] * attributes[i]; } // 삼각형 설정 for (int i = 0; i < 5; i++) { triangles[i * 3] = 0; // 중심점 triangles[i * 3 + 1] = i + 1; triangles[i * 3 + 2] = (i + 1) % 5 + 1; } mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateNormals(); meshFilter.mesh = mesh; Color color = fillMaterial.color; color.a = 0.1f; fillMaterial.color = color; }
더보기triangles[i * 3] = 0;
triangles[i * 3 + 1] = i + 1;
triangles[i * 3 + 2] = (i + 1) % 5 + 1;triangles[i * 3] = 0;
- 각 삼각형의 첫 번째 꼭짓점은 항상 중심점 입니다.
- 예: triangles[0], triangles[3], triangles[6], triangles[9], triangles[12] 모두 중심점 (`0`)을 가리킵니다.
triangles[i * 3 + 1] = i + 1;
- 각 삼각형의 두 번째 꼭짓점은 현재 꼭짓점입니다.
- 예: triangles[1]은 vertices[1], triangles[4]는 vertices[2], triangles[7]은 vertices[3], triangles[10]은 vertices[4], triangles[13]은 vertices[5]을 가리킵니다.
triangles[i * 3 + 2] = (i + 1) % 5 + 1;
- 각 삼각형의 세 번째 꼭짓점은 다음 꼭짓점입니다. (i + 1) % 5을 통해 다음 꼭짓점의 인덱스를 계산하고, +1을 더하여 vertices 배열의 인덱스로 변환합니다.
- 예: triangles[2]는 vertices[2], triangles[5]는 vertices[3], triangles[8]은 vertices[4], triangles[11]은 vertices[5], triangles[14]은 vertices[1]을 가리킵니다 (마지막 꼭짓점 이후 다시 첫 번째 꼭짓점으로 돌아갑니다).4. 중심부에서 각 꼭지점까지 라인을 그려줘 스탯을 한눈에 보기 편하게 만들기
LineRenderer은 일반적으로 월드공간에서 사용 됨으로 캔버스의 랜더모드를 월드 스페이스로 변환해 줍니다.
lineRenderer.useWorldSpace = false; 로 라인 랜더러를 로컬 좌표를 사용하도록 설정해줍니다.
5. 각 꼭지점 부분에 변경된 스테이터스 업데이트 해주기
생성된 오각형 꼭지점 부분에 텍스트로 스테이터스 이름과 스테이터스 벨류를 업데이트 해줍니다.
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
비동기 데이터 저장 (0) 2024.07.25 AssetPreview.GetAssetPreview() 로 얻은 텍스쳐 배경 투명하게 만들어서 저장하기 (0) 2024.04.27 MiniMap (2D) (0) 2024.01.21 Cinemachine 을 사용한 카메라 이동 범위 제한 (2D) (0) 2024.01.16 플레이어의 정보를 로컬 저장소에 저장하기 (PlayerPrebs) (0) 2023.12.24