프로그래밍/유니티
[유니티] 롤 골드그래프를 만들어보자(2) - 선 찍기
갓똥
2021. 8. 10. 01:21
728x90
반응형
UI를 이용하여 롤 골드그래프를 만들어보자
코드만 필요하신분은 아래로 내리시면 있습니다.
이전에 점까지 찍었으니 이제 선을 찍을 차례입니다.
각 부분 코드만 정리하고 전체코드는 마지막에 올리겠습니다.
5. 각 점을 연결한 선을 찍는다.
선을 연결하기 전에 이전포스팅에서 말씀드렸다싶이 마스크를 이용하려하니
먼저 선에 붙일 마스크를 만들고 코드를 작성하겠습니다.
1. 이전에 만든 Line 프리팹에 Mask 컴포넌트를 추가한다.
2. MaskPanel 빈 오브젝트를 만들고
3. 자식으로 BLue, Purple을 추가하고 프리팹으로 만들면 끝
코드 고고
public Transform LineGroup;
// 생성한 선을 자식으로 둘 부모
public GameObject Line;
// 선 프리팹
public GameObject MaskPanel;
// Mask 프리팹
private void DrawGoldGraph()
{
// ---
// 격차 최대값 등...
// ---
Vector2 prevDotPos = Vector2.zero;
// 이전 점과 현재 점을 이어야하므로 이전 점의 위치를 저장한다.
for (int i = 0; i < SAMPLE_RATE; i++)
{
// ---
// 점 찍기
// ---
if (i == 0)
{
prevDotPos = dotRT.anchoredPosition;
continue;
}
// 최초 점을 찍을 땐 연결할 선이 없으므로 넘긴다.
GameObject line = Instantiate(Line, LineGroup, true);
line.transform.localScale = Vector3.one;
RectTransform lineRT = line.GetComponent<RectTransform>();
Image lineImage = line.GetComponent<Image>();
float lineWidth = Vector2.Distance(prevDotPos, dotRT.anchoredPosition);
float xPos = (prevDotPos.x + dotRT.anchoredPosition.x) / 2;
yPos = (prevDotPos.y + dotRT.anchoredPosition.y) / 2;
// 그림으로 설명..
Vector2 dir = (dotRT.anchoredPosition - prevDotPos).normalized;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
lineRT.anchoredPosition = new Vector2(xPos, yPos);
lineRT.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, lineWidth);
lineRT.localRotation = Quaternion.Euler(0f, 0f, angle);
// 두 점 사이의 각도를 tan를 이용하여 구한다.
// atan를 이용해 라디안 값을 구하고 Rad2Deg를 이용해 라디안을 각도로 변환해준다.
GameObject maskPanel = Instantiate(MaskPanel, Vector3.zero, Quaternion.identity);
maskPanel.transform.SetParent(LineGroup);
maskPanel.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;
maskPanel.transform.SetParent(line.transform);
// 마스크 패널 생성
prevDotPos = dotRT.anchoredPosition;
// 이전 점 좌표 업데이트
}
}
여기까지 결과물
아주 잘된다.
2편으로 끝내고 싶었는데 피곤해서 이만 줄이고 다음편으로..
728x90
반응형