GameDevelop/Unity팀프로젝트

Unity FSM – 적을 3초 보이고 1초 숨기기

도도돋치 2025. 5. 29. 10:57
Contents 접기
728x90

기존 방식의 문제

  • Update() + 타이머 → 매 프레임 GetComponent 호출 → 성능 낭비
  • 로직이 길어져 가독성이 떨어짐

 

개선 방법

1. Renderer 캐싱

한 번만 가져와서 계속 사용 → 성능 향상

private Renderer _renderer;
public void Enter(Enemy enemy) {
    _renderer = enemy.GetComponent<Renderer>();
}

 

2. 코루틴으로 시간 제어

타이머 대신 코루틴으로 깔끔하게 반복 처리

private IEnumerator InvisibilityLoop() {
    while (true) {
        _renderer.enabled = true;   // 3초 보이기
        yield return new WaitForSeconds(3f);

        _renderer.enabled = false;  // 1초 숨기기
        yield return new WaitForSeconds(1f);
    }
}

 

3. Exit에서 안전하게 정리

상태가 끝날 때는 항상 보이도록

public void Exit(Enemy enemy) {
    if (_renderer != null) _renderer.enabled = true;
    if (_coroutine != null) enemy.StopCoroutine(_coroutine);
}

 

 

최종 구조

  • Enter → Renderer 캐싱 + 코루틴 시작
  • Update → 필요 없음 (코루틴이 알아서 처리)
  • Exit → 코루틴 정리 + 원래 상태 복구

 

추가 개선

보이는 시간 숨기는 시간 변수화

public float visibleTime = 3f;
public float invisibleTime = 1f;

 

728x90