메뉴 건너뛰기

게임
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
번호 분류 제목 글쓴이 날짜 조회 수
53 게임 유니티 WebGL 빌드에서 렌더링 해상도가 너무 크게 나올때 조루나 2024.12.11 6
52 게임 유니티질 8년차에 깨달은 텍스쳐 압축과 메모리 할당 file 조루나 2024.11.09 24
51 그외 게임 번역 AI로 날먹하는 중... file 조루나 2024.08.13 60
50 그외 [C#] float.parse와 포르투갈어 사건 (CultureInfo 관련) 조루나 2024.07.26 47
49 게임 유니티 Shader Variant Loading Settings을 쓰니 메모리가 절약되네 file 조루나 2024.07.23 46
48 그외 지프로 슈퍼라이트 마우스 휠 인코더 청소할 때 꼭 풀어야 하는 나사 정리 file 조루나 2024.05.21 98
47 그외 게임 메이커 스튜디오 C# dll 라이브러리 만들 때 .NET 프레임워크 버전 문제 file 조루나 2024.05.03 103
46 게임 애드몹 Code 3 no fill 에러 원인 중 한 가지 file 조루나 2024.01.16 116
45 게임 유니티 특) 9 Slice랑 Filled 동시에 안 됨. 조루나 2023.11.29 116
» 게임 메쉬로 Progress circle 그리기 가운데 구멍 없는 버전과 있는 버전 모두 지원 (Inner Radius) 능지가 부족한 나는 이것을 그리는 데 몇 시간을 소모한 것인가? UV는 깔끔하게 못 하겠당. 이것이... file 조루나 2023.11.23 112
43 그외 남이 만든 게 안 돌아가서 뜯어고친 C# 셀레니움 크롬 드라이버 자동 업데이트 조루나 2023.11.23 98
42 게임 우효, 이런 좋은 버그리포트 도구가 있었다니 Sentry 1 file 조루나 2023.05.08 151
41 게임 Unity 빌드 전 대화상자 출력 조루나 2023.04.20 98
40 게임 유니티 모바일에서 VideoPlayer로 영상 재생하면 자꾸 멈춘다. 조루나 2023.02.23 139
39 게임 세 가지 셀 셰이딩 에셋의 단순 프레임 비교 file 조루나 2023.02.03 144
38 게임 유니티 transform 참조의 문제 file 조루나 2022.11.10 163
37 게임 에셋 Super Tilemap Editor가 바닥면 Collider를 만들어주지 않아 file 조루나 2022.10.27 113
36 게임 미소녀 뱀파이어 서바이버즈를 만들자! - 캐릭터 몸에 마법 문신 넣기 file 조루나 2022.10.06 209
35 게임 Unity 2020에서 Spine 3.6 Runtime이 AtlasAsset을 제대로 Import하지 못 할 때 file 조루나 2022.09.20 128
34 게임 스파인 텍스쳐 런타임 색칠하기 file 조루나 2022.09.02 113
Board Pagination Prev 1 2 3 Next
/ 3