본문 바로가기

Unity/제로부터 구현

Pentagon Balance UI 제작하기

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