본문 바로가기

Unity

Unity 오브젝트 자동으로 색상 변화시키기 #Color Lerp

 

유니티로 무언가 하다 보면 자동으로 색상을 변화시켜야 할 때가 있는데

유튜브에 간단한 강의가 있어서 따라 해보았다! 

 

 


시작! 🍙

 

 

 

1. 오브젝트 만들기

큐브를 이용해 바닥과 도미노 모양의 오브젝트 5개를 만든다.

 

2. 머터리얼 할당

1. project > Create > New Material

2. Material 색상: 흰색

2. Cube > Mesh Renderer > Material 할당 

 

3. ColorLerp 스크립트 작성 

public class ColorLerp : MonoBehaviour
{

    MeshRenderer cubeMeshRenderer;
    [SerializeField]
    [Range(0f, 1f)] float lerpTime; // 색상이 변하는 속도

    [SerializeField]
    Color[] myColors;

    int colorIndex = 0;

    float t = 0f;

    int colorsLength;

    void Start()
    {
        cubeMeshRenderer = GetComponent<MeshRenderer>();
        colorsLength = myColors.Length;
    }

    void Update()
    {
        cubeMeshRenderer.material.color = Color.Lerp(
            cubeMeshRenderer.material.color,
            myColors[colorIndex],
            lerpTime * Time.deltaTime);
            
        // "t" to change colorIndex after lerping       
        t += lerpTime * Time.deltaTime;

        if (t > .9f)
        {
            t = 0f;
            colorIndex++;

            if (colorIndex >= colorsLength)
            {
                colorIndex = 0;
            }
        }
    }
}

 

3-1. 스크립트 설명

더보기
[Range(0f, 1f)] float lerpTime;
  • 인스펙터에서 lerpTime 변수를 0~1사이의 슬라이더로 표시한다.

 

cubeMeshRenderer.material.color = Color.Lerp(
    cubeMeshRenderer.material.color,
    myColors[colorIndex],
    lerpTime * Time.deltaTime);
  • 큐브의 현재 색상을 목표 색상으로 일정한 속도로 전환한다.
  • 변하는 속도 : lerpTime * Time.deltaTime
  • 프레임 속도에 관계 없이 일정한 속도 유지를 위해 Time.deltaTime을 곱한다.

 

t += lerpTime * Time.deltaTime;
  • 색상 전환의 진행 정도를 추적한다.

 

4. 변화할 색상 설정

스크립트를 각 오브젝트에 할당하고 색상을 설정한다.

 

 

5. LerpTime 값 설정

그러데이션으로 변화하는 효과를 주기 위해 오브젝트의 Lerp time 값을 각각 다르게 설정한다.

나는 0.92~1.0 사이의 값을 0.2 간격으로 설정!

 

 

 

참고 링크 

Color Lerp in Unity