[Unity] Script 기본 구조 / 생명주기

niireymik·2025년 4월 10일

Unity

목록 보기
3/4

📌 Script 기본 구조

  • 스크립트의 역할
    : 지난 시간에 다룬 것처럼 유니티 세계 안에 존재하는 모든 것이 ‘오브젝트'라면 각 오브젝트에게 주는 대본이 바로 ‘스크립트’이다. 만약 점프를 구현하고 싶다면, "스페이스 키 입력이 들어오면 위쪽으로 10만큼 힘을 준다."라는 대본을 플레이어에게 주면 되는 것이다.

Visual Studio 개발 환경 설정

스크립트 추가

다음은 스크립트 생성 시 나타나는 기본 구조이다.

  • using 구문
    : 파이썬의 import처럼 외부 모듈/라이브러리를 가져올 때 사용

  • class 선언 부분
    [ public class 스크립트이름 : MonoBehaviour ] 형태로 생성되며, 스크립트가 하나의 클래스가 됨.

  • MonoBehaviour 클래스
    : Unity에서 제공하는 기본 클래스. 게임 오브젝트에 스크립트를 부착하고, Unity 엔진의 생명주기 함수 Start(), Update() 등을 제공
    → Unity의 기본적인 기능을 사용하고, 생명주기 함수를 사용하고, 게임 오브젝트에 부착하기 위해서 반드시 상속받는 클래스!




📌 유니티 생명주기

  • 초기화 영역
    • Awake() : 게임 오브젝트를 생성할 때 최초로 실행되는 함수
    • Start() : 업데이트 시작 직전에 최초로 실행되는 함수
  • 물리연산 영역
    • FixedUpdate() : 유니티 엔진이 물리 연산을 실행하기 전 실행되는 함수
      *고정적으로 계속 호출하므로 CPU를 많이 사용
  • 게임로직 영역
    • Update() : 게임 로직을 업데이트하는 함수
      *이는 실행 환경에 따라 실행 주기가 떨어질 수 있음. 즉, 실행 주기가 가변적
    • LateUpdate() : 모든 업데이트가 끝난 후 실행되는 함수
      *플레이어의 움직임에 따른 카메라 이동 등을 구현할 때 사용됨
  • 해체 영역
    • onDestroy() : 게임 오브젝트가 삭제될 때 실행되는 함수

활성화 / 비활성화

오브젝트는 on/off가 가능하여, 초기화/물리/게임로직/해체 단계 외에 세부적인 단계(활성화 / 비활성화)가 존재한다.
활성화 / 비활성화 관련 함수는 최초 1회가 아닌 오브젝트가 on/off될 때마다 실행된다.

  • onEnable()
    : Awake와 Start 사이, 게임 오브젝트가 활성화되었을 때 실행
  • onDisable()
    : onDestroy 전, 게임 오브젝트가 비활성화 되었을 때 실행

*스크립트를 끄면 onDisable이 실행되며 비활성화되었다가 다시 스크립트를 켜면 onEnable부터 실행된다.




🟢 추가 개념 : 프레임 (Frame)

아래와 같은 스크립트를 작성해 실행해 보면, Start() 메서드는 최초 1회 실행되는 반면 Update() 메서드는 실시간으로 계속 실행되는 것을 확인할 수 있다.

이처럼 유니티 생명주기 메서드 중 Update(), LateUpdate(), FixedUpdate()는 모두 '프레임'이라는 단위마다 실행된다.

프레임 (Frame)

프레임 (Frame) == 한 장의 이미지

프레임은 한 장의 이미지이다. 동영상이나 애니메이션에서, 우리는 영상이 아닌 빠르게 지나가는 이미지들을 보는 것이다. 익숙한 단위인 'fps'는 frame per second, 초당 몇 프레임이 지나가는지를 의미한다.

그런데 프레임은 말그대로 '실행의 단위'가 되므로, 불공정을 야기한다. fps는 환경(기기)마다 다르다. 그럼 Update() 함수에 '총알이 앞으로 10cm 나아간다'라고 되어 있으면 30fps의 컴퓨터에서는 초당 3m, 60fps의 컴퓨터에서는 초당 6m 전진하게 되는 것이다.
이로 인한 문제가 생기지 않도록 설정을 해 줘야 하는데, 이게 바로 Time.deltatime이다. 이는 추후 Vector3의 이동 함수를 학습하며 자세히 알아보자.

0개의 댓글