본문 바로가기
Language/C#

Awake, Start, Update, FixedUpdate

by W00gie 2020. 10. 4.

Unity Script에서는 기본적으로 두가지 초기화 함수를 제공한다.

Awake와 State이다.

 

using UnityEngine;
using System.Collections;

public class AwakeAndStart : MonoBehaviour
{
    void Awake ()
    {
        Debug.Log("Awake called.");
    }
    
    
    void Start ()
    {
        Debug.Log("Start called.");
    }
}

 

Awake

 Inspector창에서 스크립트 요소를 비활성화해도 실행된다.

 초기화와 스크립트실행 사이 모든 레퍼런스 설정에 이용된다.

 

Start 

 스크립트를 활성화해야 실행된다.

 Awake 다음으로 첫 Update() 직전에 호출된다.

 

Awake()와 Start() 모두 한번씩만 실행이 가능하며 반복하기 위해선 Initialization을 통해서만 반복가능하다.

 

 

스크립트의 실행을 위해서는 기본적으로 Update와 FixedUpdate()를 제공한다.

 

using UnityEngine;
using System.Collections;

public class UpdateAndFixedUpdate : MonoBehaviour
{
    void FixedUpdate ()
    {
        Debug.Log("FixedUpdate time :" + Time.deltaTime);
    }
    
    
    void Update ()
    {
        Debug.Log("Update time :" + Time.deltaTime);
    }
}

 

Update()

 매 *Frame 마다 호출된다.

 Update의 경우 비물리적인 물체의 움직임 또는 간단한 타임액션에 사용된다.

 정기적인 시간에 호출되지않고, 클라이언트와 프레임 호출시간에 따라 달라진다는 점을 명시해야한다.

 

*Frame

 화면에 뿌려지는 정지영상의 낱장을 의미한다.

 랜더링을 통해 한 프레임이 컴퓨터화면에 그려지는데,  이 랜더링의 수치를 보통 FPS(frame per second)로 표기한다.

 30fps의 경우 초당 30장의 프레임을 그린다는 뜻.

 

FixedUpdate()

 Update와 달리 정기적인 시간에 호출된다.(0.02sec)

 이 점을 이용해 물리적 계산이 필요한 코드를 FixedUpdate()내에 작성하는게 용이하다 (Ex. Rigidbody 컴포넌트)

 

 

+ Frame 관련된 정의를 찾던 중 위키에서 재미있는 에피소드를 접했다.

 

FPS인 퀘이크 3에서는 특히 초당 프레임 집착이 심했는데, 프레임이 높으면 높을수록 점프 높이가 높아지는 현상이 있었고, 30~60 fps 대의 플레이어는 특정 맵에서 메가 헬스를 먹을 수 없지만 100 fps 이상 나오는 사람은 메가 헬스를 챙길 수 있는 등의 큰 차이가 있었다고 한다. 이 밖에도 다양한 맵에서 점프 높이로 말미암아 이점을 많이 챙길 수 있었기에 초당 프레임에 목을 매는 사람들이 늘어났다. ( namu.wiki/w/FPS )

 

사용자들간에 다른 물리효과가 적용되었던 점은 Update와 같이 클라이언트에 따라 다른 퍼포먼스를 보이는 프레임 단위로 호출되는 함수에 물리연산 코드(점프)를 적용했기 때문이 아닌가 추측이 된다. 상황에 따라 적절한 메소드에 코드작성이 꼭 필요할 것 같다.

 

 

 

 

 

 

'Language > C#' 카테고리의 다른 글

SendMessage vs GetComponent  (0) 2020.10.12