카테고리 없음

코루틴Coroutine으로 깜빡임효과나 버프효과

rxo2 2025. 3. 18. 22:31
public class ColorChangeEffect : MonoBehaviour
{
    private Renderer objRenderer;
    private Color originalColor;
    public Color targetColor = Color.red;
    public float duration = 1f; // 변화 시간

    private void Start()
    {
        objRenderer = GetComponent<Renderer>();
        originalColor = objRenderer.material.color;
        StartCoroutine(BlinkEffect());
    }

    IEnumerator BlinkEffect()
    {
        while (true)
        {
            objRenderer.material.color = targetColor;
            yield return new WaitForSeconds(0.5f);
            objRenderer.material.color = originalColor;
            yield return new WaitForSeconds(0.5f);
        }
    }
}

 

  • 오브젝트가 빨간색 → 원래 색상으로 깜빡이는 효과
  • WaitForSeconds(0.5f)를 사용하여 0.5초마다 변경
public class BuffEffect : MonoBehaviour
{
    public float buffDuration = 5f; // 버프 지속 시간
    public float speedBoost = 2f; // 이동 속도 증가량
    private PlayerController playerController;

    private void Start()
    {
        playerController = GetComponent<PlayerController>();
    }

    public void ActivateBuff()
    {
        StartCoroutine(BuffCoroutine());
    }

    IEnumerator BuffCoroutine()
    {
        Debug.Log("버프 시작! 속도 증가");
        playerController.moveSpeed *= speedBoost; // 속도 증가

        yield return new WaitForSeconds(buffDuration); // 버프 지속 시간

        Debug.Log("버프 종료! 속도 원래대로");
        playerController.moveSpeed /= speedBoost; // 원래 속도로 복구
    }
}

 

  • ActivateBuff()를 호출하면 버프가 시작됨
  • 5초 동안 이동 속도가 증가한 후 다시 원래 값으로 돌아감
public class SmoothColorChange : MonoBehaviour
{
    private Renderer objRenderer;
    public Color startColor = Color.white;
    public Color endColor = Color.blue;
    public float transitionTime = 2f;

    private void Start()
    {
        objRenderer = GetComponent<Renderer>();
        StartCoroutine(ColorLerpEffect());
    }

    IEnumerator ColorLerpEffect()
    {
        float elapsedTime = 0f;

        while (elapsedTime < transitionTime)
        {
            objRenderer.material.color = Color.Lerp(startColor, endColor, elapsedTime / transitionTime);
            elapsedTime += Time.deltaTime;
            yield return null;
        }

        objRenderer.material.color = endColor;
    }
}
  • Color.Lerp()를 사용하여 부드럽게 색이 변하도록 설정
  • 2초 동안 천천히 색이 White → Blue로 변화

특강에서 코루틴 설명후 자료 참고