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 |
---|