매뉴얼에서 알려주지 않은 코루틴 WaitForSeconds()의 매개변수 t에 대해

2024. 4. 15. 18:06·Unity 에러 노트

이번에 작은 게임에 액션 요소가 포함되었기에


피격 후 3초 간 무적, 그 표시로 캐릭터 깜빡임을 코루틴으로 아래와 같이 처리하였습니다.

 

하지만 에디터에서는 잘 동작하던 구문이
pc 빌드에서는 약 5초,
안드로이드 빌드에서는 약 10초
무적이 아주 길게 지속되는 이상 현상을 보였습니다.


검색해보니 유니티 포럼에서 WaitForSeconds(t)의 매개 변수로 들어가는 t (대기 시간)에 소숫점 아주 낮은 수를 쓰지 말라는 댓글을 발견할 수 있었습니다.

그 근거를 찾기 위해 해당 매서드의 소스 코드를 찾아봤으나 공식 소스는 찾지 못했고

맨 아래의 참고 메뉴얼을 통해 매 프레임마다 WaitForSeconds()를 호출하는 것을 보고 가설을 세울 수 있었습니다.

 

 

위의 소스 코드에서 사용한 0.01f는 실제로 약간의 오차를 포함합니다.

 

이벤트 함수의 한바퀴 실행 시간을 단순하게 봐도 1/60초 = 0.0167f

이것보다 적은 값이라 누적하여 t = 0.01f를 만들 수 없기에 실행한 환경에 따라 오차가 발생했으며

 

300번 누적으로 인해 작은 오차들이 더해진 값이 크게 달라지지 않았나 생각합니다.

 

 

따라서, 이를 해결하기 위해 아래와 같이 코드를 수정하였습니다.

계산 속도가 다른 환경에서도 동일한 값을 낼 수 있게 0.01f 같은 모호한 값이 아닌

 

Fixed Update 주기인 0.02초 대기를 최소 단위로 사용하니 모든 환경에서 동일한 시간의 무적이 동작하였습니다.

 

결론은 아래와 같습니다.

 

yield return null; 과 같은 1프레임 대기,

WaitForFixedUpdate()와 같은 0.02초 대기

 

를 최소 단위로 이용하여 처리하는 것이 좋습니다.

 

혹은 

WaitForSeconds() 매개변수 t는 최소 소숫점 한자리 0.1f까지만 사용


유니티 공식 매뉴얼에도 1프레임마다 처리할 필요가 없는 무거운 계산에는 0.1f 마다 계산하라고 권장하는 것으로 보아 적어도 해당 시간까지는 1프레임 실행 시간을 누적하여 오차를 최소화하는 장치가 마련되어 있으리라 봅니다.

 

참고 문헌

https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com

 

저작자표시 비영리 동일조건 (새창열림)

'Unity 에러 노트' 카테고리의 다른 글

TextMeshPro 텍스트에 반투명한 네모가 나타날 때  (0) 2024.11.20
게임 오브젝트 비활성화 후 다시 활성화 시 애니메이터 파라미터 값 초기화  (0) 2024.10.01
유니티) 갤럭시 s24 시리즈와의 앱 호환성 문제  (0) 2024.03.12
Edge Collider 2D 스크립팅 툴팁 오기  (0) 2024.03.10
인스펙터에 스크립트 활성/비활성 체크 박스 사라짐  (0) 2023.10.12
'Unity 에러 노트' 카테고리의 다른 글
  • TextMeshPro 텍스트에 반투명한 네모가 나타날 때
  • 게임 오브젝트 비활성화 후 다시 활성화 시 애니메이터 파라미터 값 초기화
  • 유니티) 갤럭시 s24 시리즈와의 앱 호환성 문제
  • Edge Collider 2D 스크립팅 툴팁 오기
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    룰렛
    대시
    유니티 애니메이터 파라미터 초기화
    갤럭시 S24
    sprite mask
    UI
    세이브
    무료스킨
    unity
    마스크
    텍스트매시프로
    hello
    직렬화
    64비트
    스파인
    잔상
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    유니티
    삭제
    다크모드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
매뉴얼에서 알려주지 않은 코루틴 WaitForSeconds()의 매개변수 t에 대해
상단으로

티스토리툴바