메뉴 건너뛰기

게임
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개 첨부 됨 ( / )

  1. 유니티 WebGL 빌드에서 렌더링 해상도가 너무 크게 나올때

  2. 유니티질 8년차에 깨달은 텍스쳐 압축과 메모리 할당

  3. 게임 번역 AI로 날먹하는 중...

  4. [C#] float.parse와 포르투갈어 사건 (CultureInfo 관련)

  5. 유니티 Shader Variant Loading Settings을 쓰니 메모리가 절약되네

  6. 지프로 슈퍼라이트 마우스 휠 인코더 청소할 때 꼭 풀어야 하는 나사 정리

  7. 게임 메이커 스튜디오 C# dll 라이브러리 만들 때 .NET 프레임워크 버전 문제

  8. 애드몹 Code 3 no fill 에러 원인 중 한 가지

  9. 유니티 특) 9 Slice랑 Filled 동시에 안 됨.

  10. 메쉬로 Progress circle 그리기

  11. 남이 만든 게 안 돌아가서 뜯어고친 C# 셀레니움 크롬 드라이버 자동 업데이트

  12. 우효, 이런 좋은 버그리포트 도구가 있었다니 Sentry

  13. Unity 빌드 전 대화상자 출력

  14. 유니티 모바일에서 VideoPlayer로 영상 재생하면 자꾸 멈춘다.

  15. 세 가지 셀 셰이딩 에셋의 단순 프레임 비교

  16. 유니티 transform 참조의 문제

  17. 에셋 Super Tilemap Editor가 바닥면 Collider를 만들어주지 않아

  18. 미소녀 뱀파이어 서바이버즈를 만들자! - 캐릭터 몸에 마법 문신 넣기

  19. Unity 2020에서 Spine 3.6 Runtime이 AtlasAsset을 제대로 Import하지 못 할 때

  20. 스파인 텍스쳐 런타임 색칠하기

Board Pagination Prev 1 2 3 Next
/ 3