방프리

20.01.24 Unity Engine에서 Update 와 FixedUpdate의 차이점 본문

GameEngine/UnityEngine

20.01.24 Unity Engine에서 Update 와 FixedUpdate의 차이점

방프리 2020. 1. 24. 17:07

https://learn.unity.com/tutorial/update-and-fixedupdate#5c8a4242edbc2a001f47cd63

 

Update and FixedUpdate - Unity Learn

How to effect changes every frame with the Update and FixedUpdate functions, and their differences. This tutorial is included in the Beginner Scripting project. Previous: Awake and Start Next: Vector Maths

learn.unity.com

포트폴리오 제작 도중 Ray나 충돌 관련 부분은 FixedUpdate에서 처리하는 것이 좋다고해서 

도대체 Update와 FixedUpdate가 무슨 차이가 있는지 궁금해서 찾아보았다.

(위의 링크는 Unity에서 직접 제공한 튜토리얼)

마침 Stack overflow에 관련 질문이 올라와있었다.

"Update는 한 프레임마다 실행이 됩니다. FixedUpdate의 경우엔 각 초마다 충돌 프레임을 체크하는지, 얼마나 빠르게/느리게

프레임이 진행되는지에 따라 각 프레임마다 여러번, 한 번 혹은 아예 실행을 하지 않을 수도 있습니다."

"물리 엔진은 자기 스스로 정확한 시간에 동작합니다. 이러한 이유 때문에 FixedUpdate는 반드시 힘을 가하거나, 회전을 계산하거나,

또는 물리 계산 관련 함수에 사용이 되어야 합니다.

Update()는 물리 엔진과 다르게 작동하기 때문에, 렌더링 엔진에서 얼마나 많은 그래픽 리소스를 로드하는지에 따라 느려지거나

빨라지기 때문에 일정하지 않은 시간에 물리적 충돌을 일으킬 수 있습니다." 

즉, Rayhit나 Physics 충돌들은 일정한 주기로 체크가 되어야하는데 Update()는 그에 어울리지 않는 함수라는 것이다.

 

동영상에서 따로 한국어 자막이 없어서 필요하신 분들은 참고해봐도 괜찮을 것 같다.

 

Update is one of the most commonly used function in Unity

(Update 함수는 유니티에서 가장 보편적으로 사용하는 함수 중에 하나입니다)

 

It’s called once per frame on every script that uses it.

( 함수는 사용되는 모든 스크립트에서 프레임마다 호출합니다.)

 

Almost anything that needs to be changed or adjusted regularly happens here.

(변경이 필요하거나 규칙적으로 어떤 행동이 적용되어야하는 거의 모든 것에 함수가 필요합니다.)

 

The movement of non-physics objects, simple timers, and the detection of input are just a few things

that are usually done in Update

(물리적 충돌이 없이 움직이는 물체, 간단한 타이머 그리고 입력 감지에 관련된 가지들이 Update에서 이루어집니다.)

 

Note that Update is not called on a regular timeline.

(Update 규칙적인 시간에 호출되지 않습니다.)

 

If one frame takes longer to process than the next, then the time between the Update calls will be different.

(만약 프레임에서 다음으로 넘어가는 프로세스를 부르는데 오래 걸린다면, Update 호출하는데 걸리는 시간은 달라질 것입니다.)

 

FixedUpdate is a similar function to Update,but it has a few important differences.

(FixedUpdate Update 비슷하지만 중요한 가지가 다릅니다.)

 

FixedUpdate is called on a regular timeline, and will have the same time between calls.

(FixedUpdate 정기적인 시간에 호출되며, 거의 비슷한 시간으로 호출이 진행됩니다.)

 

Immediately after FixedUpdate is called, any necessary physics calculations are made.

(FixedUpdate 호출된 직후, 물리 계산에 필요한 것들이 만들어집니다.)

 

As such, anything that affects a Rigidbody, meaning a physics object, should be executed in FixedUpdate rather than Update.

(, 물리적 물체, 강체에 영향을 받는 것들은 Update 아닌 FixedUpate에서 실행이 되어야합니다.)

 

When scripting physics in the FixedUpdate loop, it’s good practice to use forces for movement.

(물체 관련 코드를 FixedUpdate 반복문에 작성한다면, 물체 이동 관련 공부에 도움이 것입니다.)

 

Let’s take a look at the difference between FixedUpdate and Update calls.

(, 이제 FixedUpate Update 어떻게 다르게 호출되는지 확인해보겠습니다.)

 

In this example, we’re login into the console with each FixedUpdate and Update, by adding the value of “time.delta” time

(간단하게, “time.delta”라는 값을 넣어서 console에서 FixedUpdate Update에서 어떻게 동작하는지 보겠습니다.)

 

When I press Play and Pause, you can see that the time between FixedUpdates is always 0.02,

whereas the time between Updates varies.

(제가 재생과 일시정지를 눌렀을 , 여러분들은 FixedUpdate에서는 항상 0.02 간격으로, Update 항상 다른 시간에 호출되는 것을 확인할 있습니다.)

 

This can be shown even more clearly by collapsing the console.

( 로그들은 console collapsing목록에서 자세히 있습니다.)

 

If I play now and Pause, you can see that all of my FixedUpdates are collapsed into one,

even though there’s a large number of them, we can see that they’re all 0.02, whereas the Updates times vary.

(만약 제가 재생을하고 일시정지를 하면, 여러분들은 collapsed 목록에서 FixedUpdate 모두 0.02을 출력하는 반면에

Update 시간은 다양한 것을 있습니다.)

 

Update and many other special functions in Unity can be created quickly and easily in Visual Studio.

(유니티에 있는 Update 다른 많은 함수들은 Visual Studio에서 빠르고 쉽게 생성할 있습니다.)

 

By using the MonoBehaviour scripting wizard

(바로 MonoBehavior 마법사를 통해서요)

 

In Visual Studio, position the cursor where you want the new function to be inserted, 

(Visual Studio에서, 새로운 함수를 넣고 싶은 곳에 커서를 )

 

the press Control + Shift + M to launch the wizard.

(Control + Shift + M 눌러 마법사를 실행합니다.)

 

In the Create Script Methods window, mark the check box next to the name of each method you want to add.

( 함수 생성 창에서 여러분들이 만들고 싶은 함수의 이름을 찾은 체크박스를 클릭합니다.)

 

Choose the “Okay” button to exit the wizard and insert the methods into your code

(확인 버튼을 눌러 마법사를 빠져나온 여러분들의 스크립트에 함수를 추가합니다.)

 

Using the wizard in this way can help you to avoid errors in your code, and also help you to discover

what functions are available as you’re learning.

(이렇게 함수를 추가한다면 코드 작성시 불필요한 에러를 피할 있고, 여러분들이 유니티 함수 종류에 대해 공부할

정말 도움이 것입니다.)

Comments