ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pentagon Balance UI 제작하기
    Unity/제로부터 구현 2024. 6. 7. 18:01
    728x90

    캐릭터의 스텟을 받아와 오각형 밸런스 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
Designed by Tistory.