프레임(Frame)과 프레임 속도(Frame rate)
게임과 애니메이션 등에서 속도를 표현할 때는 시간당 프레임으로 표현한다
'30 frame/s'로 간략하게 '30 프레임', '60 프레임'이라고 부른다
30 프레임은 1 프레임 당 1/30초가 걸린다는 것이다
하지만 정확히 1/30초마다 프레임이 갱신되는 것은 아니다
초당 30 프레임을 맞추지만 그 사이의 간격
즉, Frame rate는 일정하게 유지되지 않는다
유니티 Frame rate
유니티에서는 Update()와 FixedUpdate()가 제공되는데
60 프레임 게임이라는 가정하에
Update()는 매 프레임마다 호출되는 것은 맞으나
Frame rate가 일정하지 않고 1/60초마다 프레임이 정확히 갱신되지 않는다
FixedUpdate()는 Frame rate가 일정하고 Timestep마다 프레임이 정확히 갱신된다
Timestep는 60 fps 기준으로 0.02초마다 FixedUpdate()가 호출되고 1초에는 50번 호출된다
이는 Update()와 FixedUpdate()의 호출 횟수가 다르다는 것을 의미한다
따라서,
Update()에서는
물리효과가 적용되지 않는 오브젝트, 단순 타이머, 키 입력 등을 관리하고
Time.deltaTime()을 이용한다
FixedUpdate()에서는
시간이 가변적이지 않고 고정된 계산이 필요한 물리에 대한 코드들이 작성된다
FixedUpdate()가 아닌 Update()에서 RigidBody 속성을 이용하면 결과가 달라지고
Time.fixedDelataTime()를 사용해야 한다
유니티 Rigidbody AddForce
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);
위와 같이 작성한다
유니티에서는 Force를 적용하는 모드로는 총 4가지가 있고 아래와 같다
평균 속도(Average Velocity)와 순간 속도(Instantaneous Velocity)
평균 속도는 일정한 시간 동안 물체가 이동한 거리를 그 시간으로 나눈 값이다
순간 속도는 물체의 위치 함수를 미분하여 구할 수 있다
정확하게는 시간 t에서의 위치 함수 s(t)를 시간에 대해 미분한 것이다
게임에서
가장 짧은 순간은 1 프레임의 시간을 의미한다
예를 들어, 30 fps 일 경우 1/30초가 가장 짧은 순간이고
1/30초(1 프레임의 시간) 동안의 평균속도가 바로 게임에서의 순간 속도를 의미한다는 것이다
'게임 수학 & 물리 > 게임 물리' 카테고리의 다른 글
[게임 물리] 운동량(Momentum)과 반발 계수(Coefficient of restitution) (0) | 2024.03.09 |
---|---|
[게임 물리] 마찰력(Friction force)과 마찰계수(Coefficient of friction) (0) | 2024.03.08 |
[게임 물리] 운동 방정식(Equations of motion) (0) | 2024.03.07 |
[게임 물리] 등속도 운동(Uniform Linear Motion), 등가속도 운동(Uniformly Accelerated Motion), 포물선 운동(Projectile motion) (0) | 2024.03.05 |
[게임 물리] 게임 물리의 변환 과정 (0) | 2024.03.04 |