
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(); // 새로운 색상을 다음 색상에 저장
}
}
선형 보간(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일 때 마지막 색상에 도달했다는 의미