성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • MFC
  • WINAPI
  • Boot Code 분석
  • 문자열 나누기
  • ARM Reverse Engineering

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

Unity

[Unity] Time.deltaTime 의 정의 및 사용 이유

2023. 3. 9. 11:19

Time.deltaTime 을 매번 사용하지만, 그 이유에 대해서 정리하자면

 

API 설명에서는

 

'이전 프레임에서 현재 프레임까지 걸린 시간이다. 1 프레임에 걸린 시간'

 

라고 한다. 정리해보자.

void Update(){

}

 

위의 Update() 메소드는 반복적으로 loop 되는 함수.

 

당연히 디바이스의 성능에 따라서 반복문에 많이 들어가거나 적게 들어갈 것이다. 구체적인 단위로는 

 

FPS(Frame per second)로 1초에 그림을 몇번 그려서 영상처럼 보이게 만드는지로 나타낸다.

 

float speed = 10f;

void Update(){        
	// 입력값
        float h_Input = Input.GetAxis("Horizontal");
        float v_Input = Input.GetAxis("Vertical");

	// speed 를 곱해서 실제 이동에 필요한 값
        h_Input = h_Input * speed;
        v_Input = v_Input * speed;

        // Vector3 속도정의
        Vector3 newVelocity = new Vector3(h_Input, 0f, v_Input);

        // Rigidbody 에 속도할당
        playerRigidbody.velocity = newVelocity;
}

<그림1>

 

위의 예제에서 h_Input, v_Input 은 디바이스의 성능에 따라서 Update 문을 호출하면서

 

값을 계속 입력받는다. 그리고 playerRigidbody.velocity 에 속도를 할당해주면서 Rigidbody 를 가지고있는

 

오브젝트가 움직일 것이다. 

 

float speed = 10f;

void Update(){
	// 1초에 10번 호출
...
        h_Input = h_Input * speed;	// * 10번 호출 : -1~1 * 10f * 10번
        v_Input = v_Input * speed;	// * 10번 호출 : -1~1 * 10f * 10번
...
}

<그림2. 1초에 10번 호출하는 디바이스>

float speed = 10f;

void Update(){
	// 1초에 100번 호출
...
        h_Input = h_Input * speed;	// * 100번 호출 : -1~1 * 10f * 100번
        v_Input = v_Input * speed;	// * 100번 호출 : -1~1 * 10f * 100번
...
}

<그림3. 1초에 100번 호출하는 디바이스>

 

입력이 많으면 많이 그려지고, 많이 이동할 것이다.

 

그렇다면 각각의 디바이스들은 그려지는 횟수나 이동거리가 각각 달라질 것이다.

 

이때 Time.deltaTime 즉 '이전 프레임에서 현재 프레임까지 걸린 시간이다. 1 프레임에 걸린 시간' 

 

그림 1. 의 설명

1초에 10회 호출되는거라면 1회는 10ms, 이때의 걸린시간 deltaTime은 1초를 기준으로 단위를 바꾸면 1/10 sec 가 된다.

 

0.1초에 1프레임 => 0.1초에 1번 그림 그린다.

1초에 10프레임 => 1초에 10번 그림 그린다.

 

그림 2. 의 설명

1초에 100회 호출되는거라면 1회는 1ms, 이때의 걸린시간 deltaTime은 1초를 기준으로 단위를 바꾸면 1/100 sec 가 된다.

 

0.01초에 1프레임 => 0.01초에 1번 그림 그린다.

1초에 100프레임 => 1초에 100번 그림 그린다.

 

10ms = 1/10 sec
1ms = 1/100 sec

 

그렇다면  위의 <그림2>, <그림3> 각각에

float speed = 10f;

void Update(){
	// 1초에 10번 호출
...
        h_Input = h_Input * speed * Time.deltaTime;	// * 10번 호출 : -1~1 * 10f * 10번 * 1/10
        v_Input = v_Input * speed * Time.deltaTime;	// * 10번 호출 : -1~1 * 10f * 10번 * 1/10
...
}

<그림2-1 수정된 10프레임의 디바이스>

float speed = 10f;

void Update(){
	// 1초에 100번 호출
...
        h_Input = h_Input * speed * Time.deltaTime;	// * 10번 호출 : -1~1 * 10f * 100번 * 1/100
        v_Input = v_Input * speed * Time.deltaTime;	// * 10번 호출 : -1~1 * 10f * 100번 * 1/100
...
}

<그림2-1 수정된 100프레임의 디바이스>

 

에서 h_Input, v_Input 각각은 speed 값에 의한 입력값만 남는다.

 

f(x) = -1~1 * 10f * 100 * 1/100

 

그러므로 오브젝트의 움직임이 프레임의 차이로 1초에 그려지는 횟수가 달라지기 때문에 끊기게 보이지만

 

1초에 도달하는 위치는 같아진다.

 

 

결론

Time.deltaTime 을 쓰면 디바이스 성능에 따른 차이를 없애준다.

저작자표시 (새창열림)

'Unity' 카테고리의 다른 글

[Unity] RhythmGame NotesEditor 노트 편집기 찾음  (0) 2023.03.24
[Unity] Mac 환경에서 VS 안에 한글 깨짐 수정하기  (0) 2023.03.15
[Unity] Make Dynamic 2D Water  (0) 2023.02.01
[Unity] How to Program in Unity: Observer Pattern  (0) 2023.01.27
[Unity] bundleVersion, BundleVersionCode 가져오기  (0) 2023.01.27
    'Unity' 카테고리의 다른 글
    • [Unity] RhythmGame NotesEditor 노트 편집기 찾음
    • [Unity] Mac 환경에서 VS 안에 한글 깨짐 수정하기
    • [Unity] Make Dynamic 2D Water
    • [Unity] How to Program in Unity: Observer Pattern
    성엽이
    성엽이

    티스토리툴바