공부/Unity

씬, 게임 오브젝트, 인스펙터, 컴포넌트, 좌표계, 원근 투영, 직교 투영, 컴포넌트 패턴, 이벤트 함수 실행 순서

월러비 2025. 8. 18. 19:38
  • LTS : 장기적으로 지원하는 버전
  • Asset : 소스코드, 리소스 등을 저장하는 폴더

유니티 허브

  • 유니티 에디터 버전과 프로젝트를 하나로 관리하는 프로그램

  • 유니티는 1개 이상의 씬이 계속 열려있다.
  • Hierarchy 상단에서 현재 열려있는 씬의 이름을 확인할 수 있다.
  • 씬을 새로 생성하면 자동 저장되지 않는다.
    • Save를 직접 하지 않는다면 편집한 내용이 삭제된다.
  • Hierarchy에서 씬 여러개의 요소를 한번에 확인하고싶다면 Hierarchy 창에 씬 아이콘을 드래그 앤 드롭하면 한번에 확인할 수 있다.
  • 씬 : 게임 오브젝트들의 집합 + 씬 고유 설정들

게임 오브젝트

  • 씬에 속하는 객체
  • 컴포넌트들의 집합
  • 모든 게임오브젝트는 Transform 컴포넌트를 가지고 있다.
  • 게임 오브젝트안에 오브젝트를 끌어다 놓으면 자식 오브젝트가 된다.
  • MeFilter : 오브젝트의 외곽선을 지정하는 컴포넌트다.
  • Mesh Renderersh : 메쉬를 화면에 실제로 그리는 컴포넌트다.
  • Material : 텍스쳐와 색을 오브젝트에 그리는 정보를 저장한 컴포넌트다.
    • MAT 파일과 META 파일이 한번에 Material이라는 컴포넌트로 보여지는 것이다.

인스펙터

  • 에셋(게임 오브젝트 등)을 선택할때 해당 해셋의 정보를 확인 및 편집할 수 있게하는 창이다.
  • AddComponent : 선택한 게임오브젝트에 Component를 추가하는 버튼이다.

기즈모

  • 디버깅을 위해 시각적으로 확인할 수 있는 도형이다.

컴포넌트

  • 범용 컴포넌트 : RigidBody, Collider같이 유니티 엔진 내에서 쓸 수 있는 기본 컴포넌트들이 있다.
  • 사용자 컴포넌트 : 스크립트 또한 컴포넌트다.
  • RigidBody : 물리적인 작용을 구현한 컴포넌트다.
    • 게임오브젝트에 추가하면 중력이 작용하고 다른 게임 오브젝트와의 Collider와 ‘충돌’이 적용되어 물리적인 작용도 적용된다.
  • Collider : 충돌 작용을 구현한 컴포넌트다.
  • 메인 카메라 : Camera 컴포넌트가 있고, Tag가 MainCamera인 게임 오브젝트가 메인 카메라다.
    • 이 오브젝트를 비활성화하면 게임뷰가 렌더링되지 않는다.
  • light : 게임상의 빛을 비추는 컴포넌트다.
  • 스크립트에서 다른 컴포넌트를 레퍼런스로 변수를 선언해서 해당 컴포넌트를 조작할 수 있다.
    • RigidBody 컴포넌트 변수를 선언하여 AddForce로 힘을 줄 수 있다.

좌표계

  • Global : 씬 뷰의 좌표게에서의 오브젝트 Transform을 반환한다.
    • 절대 좌표계 라고 부른다.
  • Local : 선택한 오브젝트를 기준으로 화면에서의 좌표를 반환한다.

원근 투영

  • 같은 사이즈의 오브젝트가 있을때 가까이 있는것은 크게, 먼것은 작게 그려지는 투영법이다.
    • 3D 게임이 원근 투영을 사용한다.

직교 투영

  • 같은 사이즈라면 멀리 있든 작게 있든 같은 크기로 그려지는 투영법이다.
    • 2D 게임이 직교투영이다.

Meta 파일

  • 인스펙터에서 수정되는 정보들이 저장되는 파일이다.
  • 원본 파일 또는 폴더와 함께 생성된다.

유니티 프로젝트 저장방법

  • Assets 폴더, Packages 폴더, ProjectSettings 폴더 3개를 압축해서 저장한다.

Asset

  • Project에서 생성되는것은 ‘에셋’이고, Hierarchy에서 생성되는 것은 ‘게임 오브젝트’ 다.
    • 구별해야한다.

유니티가 동작하는 원리

상속과 재사용

  • 게임 엔진은 이미 완성된 기반 코드를 제공한다.
  • 게임 엔진의 코드를 재사용 하므로 생산성이 올라간다.
  • 유니티의 컴포넌트 기반 구조를 이해하려면 코드를 재사용하는 전통적 방법인 상속을 알아야한다.
    • 재사용이라는것은 스크립트 하나만 만들면 그것을 컴포넌트로써 다른 게임 오브젝트에 추가하면 스크립트의 기능을 그대로 사용할 수 있다는것이다.
  • 스크립트를 게임오브젝트에 컴포넌트로 추가하면 게임이 실행될때 해당 스크립트의 인스턴스가 생성되는 것이다.
    • 한 오브젝트에 같은 스크립트가 여러개 붙어도 붙인만큼 인스턴스가 계속 생성된다.
  • Monobehavior를 상속한 스크립트를 생성하면 해당 스크립트를 게임오브젝트의 컴포넌트로 사용할 수 있게된다.

상속의 한계

  • 부모에서 정의한 기능이 필요없는 자식 클래스가 있을 수 있다.
  • 부모 클래스의 기존 기능이 자식 클래스의 기능과 충돌할 수 있다.
  • 해결방안 : 컴포넌트 패턴

컴포넌트 패턴

  • 유니티는 게임 오브젝트를 컴포넌트 패턴을 사용해 만든다.
  • 컴포넌트 패턴 혹은 컴포지션 패턴이란 : 미리 만들어진 부품을 조립하여 하나의 완성품을 만드는 패턴이다.
  • 유연한 재사용이 가능하다.
  • 기획자의 프로그래머 의존도가 낮아진다.
    • 만들어진 컴포넌트를 조립하여 의도된 게임오브젝트를 만들 수 있다.

유니티 이벤트 함수

  • 가상 함수가 아니다.
  • 특정 순간에 호출하면 기능하는것을 예약하는 함수다.
  • 생성자, 소멸자는 작성하면 안된다.

Start

  • 게임 오브젝트가 생성되고 첫 Update 전에 실행되는 이벤트 함수다.
  • 단 1번만 실행된다.
  • 생성자의 역할을 하는 함수다.

Update

  • 매 프레임 실행되는 함수다.
  • 게임오브젝트에 넣게되면 해당 게임오브젝트를 기준으로 매 프레임 기능이 실행된다.

이벤트 함수 실행 순서

  • Awake : 컴포넌트가 맨 처음 생성될 때 1번만 호출되는 함수다.
    • OnEnable : 활성화되었을때 호출되는 함수 - 여러번 호출 가능
  • Start
  • Update
  • FixedUpdate
  • LateUpdate : 씬의 모든 업데이트 함수가 호출된 다음에 호출되는 함수다.
  • OnDisable : 비활성화 될때 호출되는 함수다.
  • OnDestroy : 오브젝트가 삭제될때 호출되는 함수다.
    • 주의 : 오브젝트가 삭제되는것이지 오브젝트가 생성된 메모리가 삭제되는것이 아니다.
    • 메모리의 삭제는 가비지 컬렉터가 작동할때 뿐이다.

Monobehaviour

  • Monobehavior를 상속한 스크립트를 생성하면 해당 스크립트를 게임오브젝트의 컴포넌트로 사용할 수 있게된다.
  • 해당 클래스는 유니티의 제어를 받을 수 있게 된다.

메시지 기반 방식

  • 누가 메시지를 보냈는지, 누가 받게 될지 신경쓰지 않는 방식이다.
  • 메시지를 받았을떄 메시지에 명시된 기능이 있다면 실행하고, 관련이 없으면 무시하는 방식이다.

브로드 캐스팅

  • 특정 오브젝트를 가리지 않고 모든 오브젝트에 메시지를 보내는 방식이다.
  • Start(), Update(), OnTriggerEnter() 등 유니티 이벤트 메서드가 동작하는 원리이다.