| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- const l-value참조자
- IPv4 주소체계
- C언어 계산기 프로그램
- auto 키워드
- LAN의 분류
- getline()함수
- 유형 변환
- 값/참조/주소에 의한 전달
- l-value참조자
- 문자형 배열
- 백준 파이썬
- C언어 덱
- const화
- r-value참조자
- string유형
- 논리 연산
- c언어 괄호검사
- 프로그래머스 푸드 파이트 대회
- 범위 기반 for문
- 괄호 검사 프로그램
- 문제해결 단계
- C언어 스택 연산
- 운영체제 기능
- 원형 연결 구조 연결된 큐
- 알고리즘 조건
- 프로그래머스 배열만들기4
- 회전 및 자리 이동 연산
- 주기억장치
- 네트워크 결합
- 입출력 관리자
- Today
- Total
chyam
[Unity] - 슬라이더 이미지 변경 및 색 채우기 (Slider) 본문
구현 목표는 아래와 같습니다!
1. 별이 하나씩 생성되면서 슬라이더로 색 채우기
2. 만약 반개라면 반만 채우기
생성되는 것은 이전 글에서 설명해두었습니다
[Unity] - UI 이미지 부드럽게 회전하기(Quaternion.Slerp)
구현 목표는 아래 사진의 네모칸 부분(별이 나타날 부분)에1. 별이 하나씩 가운데부터 생성되기2. 생성되면서 별이 회전하도록하기 이었습니다! 먼저 네모난 박스 안에서 일정한 간격으로 생성
chyam-eun.tistory.com
이전 글과 다른점은, 별이 회전하지 않고 생성되면서 색이 채워진다는 점입니다! 아래와같이 slider에 value를 변경해주면 채울 수 있습니다.


먼저, 슬라이더를 생성해줍니다



동그란 부분은 Handle Slide Area로, 저 부분을 움직이면 동그라미 기준으로 왼쪽부분이 채워지는 기능인데, 현재 저에게는 필요없는 기능이라 제거하였습니다.

Fill 부분의 색을 변경하고, 크기를 조절하면 위와 같이됩니다.
제가 원하는 것은 별이 슬라이더 역할을 하는것이기 때문에, Background와 Fill을 별 그림으로 바꿔주었습니다.

Slider의 Anchor를 가운데로해주고,

Background와 Fill도 가운데로 해주었습니다! 크기는 대강 맞도록 조절하였습니다.
그리고 채워지는 방법이 여러가지가있는데,


Sliced와 Simple은 위와같이 채워지고,


Filled에 Fill method를 Horizontal로 하면 위와 같이 채워집니다.
만일 아래와 같이 Fill method를 Radial 360으로 하게된다면,


위와같이 채워집니다.
제가 원하는것은 반 채워진 별이었으므로 Horizontal로 설정하고 코드를 작성하였습니다.
IEnumerator review_star()
{
for (int i = 0; i < max_star; i++)
{
bool isfull = i < star_cnt; // 채워져야하는 별이면 true
// 별 생성
GameObject star = Instantiate(star_prefab, parent.transform);
if (isfull){ // 채워져야한다면 노란색으로 변경
var ishalf = 0f;
var speed = 0.5f;
if (i == star_cnt - 0.5) // 반개일 때는 value가 0.5여야함.
{
ishalf = 0.5f;
speed = 0.25f; // 조금 더 빠르게
}
Slider slider = star.transform.GetChild(0).GetComponent<Slider>();
StartCoroutine(FillSlider(slider, 0f, 1f- ishalf, speed)); // 0.5초 동안 부드럽게 채우기
}
RectTransform rect = star.GetComponent<RectTransform>();
if (rect != null)
rect.anchoredPosition = new Vector2(0f, 0f); // 가운데로 anchor 바꾸기
yield return new WaitForSeconds(0.5f); // 별 간 생성 간격
}
}
// 슬라이더로 채우는 코드
IEnumerator FillSlider(Slider slider, float startValue, float endValue, float duration)
{
float time = 0f;
while (time < duration)
{
time += Time.deltaTime;
float t = time / duration;
slider.value = Mathf.Lerp(startValue, endValue, t); // 부드럽게 도달하도록!
yield return null;
}
slider.value = endValue; // 고정
}
'unity' 카테고리의 다른 글
| [Unity] - UI 이미지 부드럽게 회전하기(Quaternion.Slerp) (2) | 2025.11.13 |
|---|---|
| [Unity] - UI 버튼 선택/해제 구현 (1) | 2025.09.01 |
| [Unity] - 스프레드 시트와 연동하기 (0) | 2025.08.21 |
| [unity] - 버튼 클릭하여 저장된 정보 불러오기 (1) | 2025.07.01 |
| [Unity] - JSON 파일 저장하고 불러오기 (1) | 2025.06.04 |