메뉴 건너뛰기

게임
2023.11.23 19:10

메쉬로 Progress circle 그리기

조회 수 112 추천 수 0 댓글 0


image.pngimage.png

 

가운데 구멍 없는 버전과 있는 버전 모두 지원 (Inner Radius)

능지가 부족한 나는 이것을 그리는 데 몇 시간을 소모한 것인가?

 

UV는 깔끔하게 못 하겠당.

이것이 수학 나형 5등급의 한계

 

Honeycam 2023-11-24 12-46-05.gif2.8 MB

 

 

 

 

 

public class DonutProgressMeshDraw : MonoBehaviour {

   

        m_mesh = m_meshFilter.mesh;
        if (m_mesh == null) m_mesh = new Mesh();

        Vector3[] vertices = new Vector3[_seg + 3];
        Vector2[] uv = new Vector2[_seg + 3];

        vertices[0] = new Vector3(0, 0, 0) + offset;

        float startRad = Mathf.Deg2Rad * (m_startAngle + 180);
        float ratio = Mathf.Clamp01(Mathf.Abs(m_startAngle - m_endAngle) / 360);
        for (int i = 0; i <= _seg ; i++) {
            float angle = (-i * (Mathf.PI * 2.0f) / _seg) * ratio + startRad;

            vertices[i + 1]
                = (new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * _outRad) + offset;
        }

        int[] triangles = new int[3 * _seg];
        if (ratio >= 1f) { //360도 전방향이면 그냥 용접해버려
            for (int i = 0; i < _seg - 1; i++) {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = i + 1;
                triangles[i * 3 + 2] = i + 2;
            }

            triangles[3 * _seg - 3] = 0;
            triangles[3 * _seg - 2] = _seg;
            triangles[3 * _seg - 1] = 1;

        } else {
            for (int i = 0; i < _seg; i++) {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = i + 1;
                triangles[i * 3 + 2] = i + 2;
            }
        }

        uv[0] = Vector2.zero;
        for (int i = 0; i < uv.Length - 1; i++) {
            uv[i + 1] = new Vector2((float)i / (uv.Length - 2), 1);
        }
        vertices[vertices.Length - 1] = vertices[0];
        uv[uv.Length - 1] = Vector2.right;


        m_mesh.Clear();
        m_mesh.vertices = vertices;
        m_mesh.triangles = triangles;
        m_mesh.uv = uv;
        m_mesh.RecalculateNormals();

    }

    public void SetMeshData(float _inRad, float _outRad, int _seg) {
        m_mesh = m_meshFilter.mesh;
        if (m_mesh == null) m_mesh = new Mesh();

        Vector3[] vertices = new Vector3[(_seg + 1) * 2];
        Vector2[] uv = new Vector2[(_seg + 1) * 2];

        float startRad = Mathf.Deg2Rad * (m_startAngle + 180);
        float ratio = Mathf.Clamp01(Mathf.Abs(m_startAngle - m_endAngle) / 360);
        for (int i = 0; i < _seg + 1; i++) {
            float angle = (-i * (Mathf.PI * 2.0f) / _seg) * ratio + startRad;

            vertices[i] = (new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * _inRad) + offset;
            vertices[i + _seg + 1] = (new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * _outRad) + offset;
            uv[i] = new Vector2(((float)i / _seg), 0);
            uv[i + _seg + 1] = new Vector2(((float)i / _seg), 1);
        }

        int[] triangles = new int[(_seg) * 6];

        for (int i = 0; i < _seg; i++) {
            triangles[i * 6] = i;
            triangles[i * 6 + 1] = i + _seg + 1;
            triangles[i * 6 + 2] = i + _seg + 2;
            triangles[i * 6 + 3] = i;
            triangles[i * 6 + 4] = i + _seg + 2;
            triangles[i * 6 + 5] = i + 1;
        }


        m_mesh.Clear();
        m_mesh.vertices = vertices;
        m_mesh.triangles = triangles;
        m_mesh.uv = uv;
        m_mesh.RecalculateNormals();
    }

}
 


사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
13 게임 Unity 빌드 전 대화상자 출력 조루나 2023.04.20 98
12 게임 우효, 이런 좋은 버그리포트 도구가 있었다니 Sentry 1 file 조루나 2023.05.08 151
11 그외 남이 만든 게 안 돌아가서 뜯어고친 C# 셀레니움 크롬 드라이버 자동 업데이트 조루나 2023.11.23 98
» 게임 메쉬로 Progress circle 그리기 가운데 구멍 없는 버전과 있는 버전 모두 지원 (Inner Radius) 능지가 부족한 나는 이것을 그리는 데 몇 시간을 소모한 것인가? UV는 깔끔하게 못 하겠당. 이것이... file 조루나 2023.11.23 112
9 게임 유니티 특) 9 Slice랑 Filled 동시에 안 됨. 조루나 2023.11.29 116
8 게임 애드몹 Code 3 no fill 에러 원인 중 한 가지 file 조루나 2024.01.16 116
7 그외 게임 메이커 스튜디오 C# dll 라이브러리 만들 때 .NET 프레임워크 버전 문제 file 조루나 2024.05.03 103
6 그외 지프로 슈퍼라이트 마우스 휠 인코더 청소할 때 꼭 풀어야 하는 나사 정리 file 조루나 2024.05.21 98
5 게임 유니티 Shader Variant Loading Settings을 쓰니 메모리가 절약되네 file 조루나 2024.07.23 47
4 그외 [C#] float.parse와 포르투갈어 사건 (CultureInfo 관련) 조루나 2024.07.26 48
3 그외 게임 번역 AI로 날먹하는 중... file 조루나 2024.08.13 61
2 게임 유니티질 8년차에 깨달은 텍스쳐 압축과 메모리 할당 file 조루나 2024.11.09 27
1 게임 유니티 WebGL 빌드에서 렌더링 해상도가 너무 크게 나올때 조루나 2024.12.11 8
Board Pagination Prev 1 2 3 Next
/ 3