[Unity] 함수 - MonoBehaviour

MINO·2024년 3월 28일
0

Unity 스크립팅

목록 보기
1/1
post-thumbnail

2024-03-28

그동안 Github 에 올려두었던 게임 개발 종합반 1~5주차 스크립트를 정리해보는 시간을 가지려고 했지만, 사용된 코드가 광범위 하기도 하고, 여러 번에 걸쳐 포스팅하려고 하다보니 분류 하기도 쉽지 않았다.

매니저님과 상담하여 "총알 발사" 라는 하나의 액션을 위해 A-Z 까지의 과정을 함수와 컴포넌트로 정리하는 방법과, 클래스 별로 정리하는 방법을 추천해주셨다.

함수에 첫 포스팅으로 모든 Unity C# Script 의 기본 클래스인 MonoBehaviour 에 대해 정리해보려고 한다.


Mono

모노는 C# 컴파일러와 공통 언어 런타임을 포함하여, Ecma 표준을 준수하는 닷넷 프레임워크의 오픈 소스 버전이다.

Behaviour

유니티에서 Behaviour 는 활성화, 비활성화 할 수 있는 컴포넌트를 뜻한다.

참고 블로그


MonoBehaviour

C# Script 를 생성하면 아래 코드가 자동으로 생성된다.

MonoBehaviour 클래스는 기본적으로 모든 Unity 스크립트가 파생되는 기본 클래스이다.

Unity의 프로젝트 창에서 C# 스크립트를 생성하면 MonoBehaviour에서 자동으로 상속되고, Start( ), Update( ) 와 같은 라이프사이클 함수와 OnCollisionEnter( ) 등의 이벤트 함수를 제공한다.

프로젝트에서 MonoBehaviour 를 상속한 C# 스크립트는 하나의 컴포넌트의 역할을 한다


LifeCycle

아래 그림을 볼 때, 좌측 상단의 Legend는 뭐지 하고 구글링을 하고 있었는데,
모서리가 둥근 흰색 박스는 User callback , 모서리가 둥근 회색 박스는 Internal function , 회색 박스는 Internal multithreaded function 을 뜻한다고 한다.

아직 Internal function 과 Internal multithreaded function 까지 공부하긴 벅차
LifeCycle을 따라 흐름만 익혀보려고 한다.


Initialization

초기화 단계

함수설명조건
Awake스크립트가 실행될 때, 단 한 번만 호출오브젝트 활성화 여부와 상관 X
Onable오브젝트를 활성화할 때마다 호출SetActive 함수 (비활성화 -> 활성화)
Start초기화단계에서 가장 마지막에 호출오브젝트 활성화

Awake 함수 호출 순서는 임의로 정할 수 없으므로 아래와 같은 코드는 NullRefereneceException 을 발생 시킬 수 있다.
class B 의 Debug.Log 를 Awake 가 아닌 Start 에 넣어주어야 한다.

using UnityEngine;

public class A : MonoBehaviour
{
    public static string dynamicMember;

    void Awake()
    {
        dynamicMember = "A의 멤버가 동적으로 생성되었습니다!";
    }
}

public class B : MonoBehaviour
{
    void Awake() // -> void Start()
    {
        Debug.Log(A.dynamicMember);
    }
}

Editor

객체의 속성을 초기 값으로 설정하는 단계

함수설명조건
Reset오브젝트에 처음 연결하거나
스크립트 속성을 초기화
오브젝트 생성 후 리셋을 눌러주거나 Reset( ) 호출

Physics

물리적인 계산을 진행하는 단계

함수설명조건
FixedUpdate일정한 주기(0.02초)로 호출물리 효과가 적용된 오브젝트 조정
OnTriggerXXX충돌을 체크두 충돌 물체 중 하나는 IsTrigger 활성화
OnCollisionXXX충돌을 체크IsTrigger 비활성화

총알이 물체와 부딪혀 사라질 때는 OnTrigger.
자동차와 물체가 부딪혀 날아갈 때는 OnCollision.
일반적으로 OnCollision 에 비해 OnTrigger 가 물리적 연산이 적다.

OnTrigger 과 OnCollision 의 충돌 처리 함수는 따로 포스팅할 예정이다.


Input events

마우스 입력을 처리하는 단계


Game Logic

실질적인 게임 로직을 처리하는 단계
( 프레임 오차가 발생할 수 있으므로 물리적인 계산은 FixedUpdate )

함수설명조건
Update매 프레임 마다 호출스크립트 활성화
LateUpdateUpdate 가 끝난 후 프레임 당 한 번 호출일반적으로 3인칭 카메라에 활용

Scene rendering

게임 오브젝트와 환경을 화면에 그려내는 단계


Gizmo rendering

개발자가 씬 뷰에서 오브젝트의 위치나 범위 등을 시각적으로 확인할 수 있도록 도와주는 단계 ( 에디터에서만 활용 )


GUI(Graphic User Interface) rendering

사용자 인터페이스 요소를 화면에 그리는 단계


End of frame

특정 작업을 프레임의 마지막에 실행하고자 할 때


Pausing

어플리케이션을 pause 했을 때


Decommissioning

더 이상 사용되지 않는 오브젝트를 해제하는 단계

함수설명
OnApplicationQuit애플리케이션 종료 전이나 플레이 중지할 때,
모든 게임 오브젝트에서 호출
OnDisable해당 Behaviour가 비활성 상태일 때 호출
OnDestroy오브젝트 존재의 마지막 프레임에 대해
모든 프레임 업데이트를 마친 후 호출

라이프 사이클을 찾아보며, 처음 들어보는 코루틴, 렌더링 관련 용어가 많았다. 해당 용어를 공부할 때마다 이 게시글도 함께 업데이트 해야겠다.


특징

  • MonoBehaviour 를 상속받은 클래스는 new 로 동적 할당할 수 없다.
  • 사용하지 않는 MonoBehaviour 함수 (Update, FixedUpdate) 는 오브젝트 별로 매우 자주 호출되므로 삭제해줘야 한다.

Unity Docs - 라이프사이클
Unity Docs - MonoBehaviour

0개의 댓글

관련 채용 정보