2019. 10. 23. 08:30ㆍ기타/유니티
"유니티 속도가 디바이스마다 달라요"
"유니티 속도 동일하게 맞추는 법"
"유니티 1초에 n만큼 움직이기"
만약, 움직이는 오브젝트의 속도가 PC, 디바이스의 사양의 따라 빨라지거나 느려지면 어떨까요?
모두에게 동일하지 않은 게임이 됩니다. Time.deltaTime은 그런 이슈를 해결해줄 수 있습니다.
코드를 통해 나쁜 예시를 들어보겠습니다.
나쁜 코드.cs
1
2
3
4
5
|
public float _speed = 10;
private void Update() {
transform.Translate(Vector2.up * _speed);
}
|
cs |
좋은 컴퓨터는 1초에 60의 프레임으로 작동하고,
나쁜 컴퓨터는 1초에 20의 프레임으로 작동한다고 생각해봅시다.
오브젝트의 speed가 10 이니까
결과는,
좋은 컴퓨터는 10 * 60 = 600unit 만큼 움직였을 것이고
나쁜 컴퓨터는 10 * 20 = 200unit 만큼 움직일 것입니다.
3배로 매우 차이가 크게 나죠?
Time.deltaTime은 프레임과 프레임 사이의 시간을 알려줍니다.
이를 통해서 코드를 바꿔봅시다.
개선 코드.cs
1
2
3
4
5
|
public float _speed = 10;
private void Update() {
transform.Translate(Vector2.up * _speed * Time.deltaTime);
}
|
cs |
좋은 컴퓨터에서는 Time.deltaTime이 1/60초일 것이고
나쁜 컴퓨터에서는 Time.deltaTime이 1/20초일 것입니다.
(Time.deltaTime은 사실 균일하지 않지만 예시를 위해 균일하다고 가정함)
이를 통해 계산해보면
10 * (1/60) * 60 = 10
10 * (1/20) * 20 = 10
좋은 컴퓨터 나쁜 컴퓨터 모두
1초에 10unit을 움직이게 됩니다.
즉 1초의 speed 만큼 움직이게 되는 것이지요.
궁금증이 해결되셨나요?
댓글에 피드백은 환영입니당
참고 : https://docs.unity3d.com/kr/530/ScriptReference/Time-deltaTime.html
'기타 > 유니티' 카테고리의 다른 글
스프라이트 크기 맞추기 - 유니티 Pixels Per Unit (0) | 2019.10.25 |
---|---|
방향 벡터 - 벡터의 정규화(normalized) 유니티 (0) | 2019.10.23 |