내일배움캠프 17일차 TIL <Unity Lerp 함수> 04/29

정광훈(Unity_9기)·2025년 4월 29일

TIL (Today I Learned)

목록 보기
28/97
post-thumbnail

Lerp 함수

자연스럽게 색상을 바꾸는 법


    Color GetRandomColor() // 랜덤 색상
    {
        float r = Random.Range(100f, 250f) / 255f;
        float g = Random.Range(100f, 250f) / 255f;
        float b = Random.Range(100f, 250f) / 255f;

        return new Color(r, g, b);
    }

    void ColorChange(GameObject go) // 색상 변경
    {
        // 이전 색과 다음 색의 중간 색상을 출력
        Color applyColor = Color.Lerp(prevColor, nextColor, (stackCount % 11) / 10f);

        //Renderer: 무언가를 그려내는 작업
        Renderer rn = go.GetComponent<Renderer>();

        // Renderer(meshRenderer의 부모 클래스)를 가져와 컬러값을 바꿔 줌
        if (rn == null) // 예외 처리
        {
            Debug.Log("Renderer is NULL");
            return;
        }

        // Block의 Inspector에서 Mesh Renderer - Materials가 기본 Material이라 흰색
        // Remderer에 포함되에 있는 Material 색상을 우리가 원하는 색상으로 바꿈
        rn.material.color = applyColor; 
        // 배경색상 (배경과 블록의 색상이 다르게 하기 위해 조금 다르게 수정)
        Camera.main.backgroundColor = applyColor - new Color(0.1f, 0.1f, 0.1f); 

        if (applyColor.Equals(nextColor) == true)
        {
            prevColor = nextColor; // 다음 색상을 이전 색상에 저장
            nextColor = GetRandomColor(); // 새로운 색상을 다음 색상에 저장
        }
    }

★ Lerp 함수

선형 보간(Linear Interpolation)을 수행하는 함수
두 값 사이의 특정 비율에 해당하는 중간 값을 부드럽게 계산하는 데 사용

ex)

// 움직임을 부드럽게
transform.position = Vector3.Lerp(transform.position, desiredPosition, StackMovingSpeed * Time.deltaTime);

// 색상을 부드럽게 변환
Color applyColor = Color.Lerp(prevColor, nextColor, (stackCount % 11) / 10f);

Color applyColor = Color.Lerp(prevColor, nextColor, (stackCount % 11) / 10f);

(stackCount % 11) / 10f: stackCount를 11로 나누면
나머지가 0 ~ 10까지 값들이 순환을 돌게 되고
거기서 10으로 나누어 0과 1로 나오게 함

stackCount에 맞춰 이전 컬러와 다음 컬러의 중간 색상이 생성이 된다.

if (applyColor.Equals(nextColor) == true): (stackCount % 11)가 10일 때 마지막 색상에 도달했다는 의미

0개의 댓글