개요

유니티에 대한 기본적인 것도 모르면서 취업하려고?

 

 

Unity

Unity Editor

유니티에 어떤 버튼들이 있고 버튼들로 무엇을 할 수 있는지 알아야한다.

유니티 메뉴얼

 

Unity 인터페이스 - Unity 매뉴얼

이 섹션에서는 가장 많이 사용되는 에디터 창과 각 창을 최대한 활용하는 방법에 대해 자세하게 설명합니다.

docs.unity3d.com

- Toolbar / Hierarchy / Window / Game View / Scene View / Overlays / Inspector Window / Status Bar

- 이 외의 UI는 Window 메뉴에서 열 수 있다.

- 간단한 조작법은 알아야 한다.

 

 

Scene & GameObject

1. Scene

 

씬 - Unity 매뉴얼

씬은 Unity에서 콘텐츠를 사용하여 작업하는 공간으로, 게임이나 애플리케이션의 전체 또는 일부를 포함하는 에셋입니다. 예를 들어 단일 씬에서 간단한 게임을 빌드할 수도 있고, 각각 고유한

docs.unity3d.com

- Scnen은 콘텐츠를 사용하여 작업하는 공간으로, 게임이나 어플리케이션의 전체 또는 일부를 포함하는 에셋이다.

- 스크립트에서는 [SceneManager]를 이용해 씬을 로드할 수 있다.

 

2. GameObject

 

게임 오브젝트 - Unity 매뉴얼

게임 오브젝트(Game Object) 는 Unity 에디터에서 가장 중요한 개념입니다.

docs.unity3d.com

- 유니티에서 존재하는 모든 오브젝트를 말한다.

- GameObject는 그 자체로 많은 것을 하기보다는 기능을 구현하는 컴포넌트의 컨테이너 역할을 한다.

- GameObject는 계층적으로 다른 GameObject를 가질 수 있다.

- 모든 GameObject는 Transform을 가진다.

   - Transform은 좌표계에서의 위치, 회전, 스케일을 표현한다.

   - Transform은 월드 혹은 부모 GameObject로부터의 상대적인 좌표를 나타낸다. (World=World, GameObject=local)

 

1) Transform

 

트랜스폼 - Unity 매뉴얼

트랜스폼(Transform) 은 게임 오브젝트의 포지션, 회전, 스케일, 부모-자식 상태를 저장하기 위해 사용하며 따라서 매우 중요합니다. 게임 오브젝트에는 항상 하나의 트랜스폼 컴포넌트가 있습니다

docs.unity3d.com

- GameObject는 좌표는 Transform 컴포넌트로 표현된다. (모든 GameObject는 Transform을 가진다.)

- GameObject는 부모 혹은 자식 게임 오브젝트를 가질 수 있다.

   - GameObject가 부모를 가질 시, Transform은 부모로부터 상대적인 Transform을 나타낸다. (Local 좌표계)

   - GameObject가 부모가 없을 시, World 좌표계로 나타낸다 (World가 부모)

- 변화가 없는 GameObject는 Static으로 설정 (최적화) <-> Dynamic GameObject

- 프로토타입을 만들 때 사용하는 Primitive GameObject가 있다 (Cube / Sphere / Capsule 등)

 

2) Components

 

Introduction to components - Unity 매뉴얼

Components are the functional pieces of every GameObject. Components contain properties which you can edit to define the behavior of a GameObject. For more information on the relationship between components and GameObjects, see GameObjects.

docs.unity3d.com

- 모든 GameObject의 기능적인 단위. 즉, 하나의 기능을 담당하는 스크립트.

   ( 시각적인 기능 / 물리적인 기능 / 행위(다른 객체에게 메시지를 전달)의 기능 )

- Unity는 다양한 Component를 내재하고 있다.

- 우리만의 Component를 작성하기 위해서는 C# 문법을 알고 있어야 한다.

   - Public 필드의 경우 Unity Editor 상에서 인터페이스로 나타난다.

   - 혹은 SerializeField 특성을 사용

- 모든 Component는 MonoBehaviour를 상속 받는다.

    ( MonoBehaviour에는 Unity 엔진에 의해 호출되는 여러 이벤트 메시지가 정의되어 있다. )

   - 각 이벤트 메시지가 언제 호출되는지 정확히 알아야 정확한 구현이 가능하다.

이벤트 메시지 (이벤트 함수) 호출 순서

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com

 

Input (입력)

 

입력 - Unity 매뉴얼

입력을 통해 사용자는 기기, 터치 또는 제스처를 사용하여 애플리케이션을 제어할 수 있습니다. 또한 그래픽 사용자 인터페이스(GUI), 사용자 아바타 등과 같은 인앱 요소를 프로그래밍하여 사용

docs.unity3d.com

- Input Manager : Unity에 내장된 기본 입력 방법

- Input System : 추가 패키지

 

 

Interaction ( 상호작용 / Collision : 충돌 )

1. Layer

 

레이어 기반 충돌 감지 - Unity 매뉴얼

레이어 기반 충돌 감지는 게임 오브젝트를 하나 이상의 특정 레이어에 설정된 다른 게임 오브젝트와 충돌하는 방법입니다.

docs.unity3d.com

- GameObject가 어떤 다른 것과 상호작용할 수 있는지 정의.

   - Layer Matrix를 설정 방법을 알아야 함

   - Layer 체크는 비트를 사용

   - Layer는 0번부터 31번까지 존재함

 

2. Character Control

- 아래의 두 방법은 게임 플레이 설계에 따라 다르게 적용한다.

1) Rigidbody

2) Character Controller

 

캐릭터 컨트롤러 - Unity 매뉴얼

캐릭터 컨트롤러(Character Controller) 는 Rigidbody 물리를 활용하지 않는 3인 또는 1인 플레이어에 주로 사용됩니다.

docs.unity3d.com

 

3. Rigidbody

 

리지드바디 개요 - Unity 매뉴얼

리지드바디(Rigidbody) 는 게임 오브젝트의 물리적 동작을 가능하게 하는 주요 컴포넌트입니다. 리지드바디가 연결된 오브젝트는 중력에 즉시 반응합니다. Collider 컴포넌트도 하나 이상 추가할 경

docs.unity3d.com

- 물리 기능을 제공하는 컴포넌트

- Collider와 함께 사용해서 충돌 처리에 사용

- Kinematic Rigidbody : 물리 엔진 대신 스크립트에 의해서 동작하는 Rigidbody

- Rigidbody는 최상위 GameObject (Root)에 단 하나만 부착해야 한다.

- Joints

   - Rigidbody를 Rigidbody한테 연결

 

4. Collider

 

콜라이더 - Unity 매뉴얼

Collider 컴포넌트는 물리적 충돌을 위해 게임 오브젝트의 모양을 정의합니다. 보이지 않는 콜라이더는 게임 오브젝트의 메시와 완전히 똑같을 필요는 없습니다. 메시의 대략적인 근사치로도 효

docs.unity3d.com

- 물리적인 표면을 제공하는 컴포넌트

   ( Box / Sphere / Capsule )

- 하나의 GameObject에 여러 개의 Collider를 설정할 수 있다.

- Static Collider : Rigidbody 없이도 Collider를 부착할 수 있으며 이를 Static Collider 라고 한다.

- Trigger

   - 단순히 다른 Collider 영역에 들어간 것을 검출할 수 있는 것

   - 다른 Collider의 진입을 허용하려면 Trigger로 만들어 주면 된다.

- Event

   - Collider에 의해 충돌이 발생할 때 호출되는 이벤트 메시지가 존재

   (OncollisionEnter / OnCollisionStay / OnCollisionExit )

   (OnTriggerEnter / OnTriggerStay / OnTriggerExit )

* Physics materials : 재질에 따른 물리적 표현 

- Ragdoll physics : 렉돌상태

- Raycast : 레이를 쏘는 것

- Overlap

   - 어떤 특정 순간에 충돌이 있는지 검출

   - 성능을 생각하면 Overlap NonAlloc을 사용하면 좋음

 

 

Coroutine

 

코루틴 - Unity 매뉴얼

코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니

docs.unity3d.com

- 시간에 기반한 동작을 편하게 구현할 수 있는 서브루틴

- StartCoroutine()으로 코루틴을 시작할 수 있고, StopCoroutine()으로 코루틴을 중지할 수 있다.

   * StopCoroutine()은 진행중인 코루틴의 매개변수와 동일한 매개변수를 넣어야 멈출 수 있다.

- 코루틴은 반드시 GameObject가 Active여야 한다.

- 코루틴은 Update() 이후에 실행된다.

 

 

Animation

 

애니메이션 - Unity 매뉴얼

Unity의 애니메이션 기능은 리타겟팅 가능한 애니메이션, 런타임 시점에 애니메이션 비중의 완벽 제어, 애니메이션 재생 중 이벤트 호출, 고급 상태 머신 계층 구조 및 전환, 얼굴 애니메이션을

docs.unity3d.com

- 유한 상태 머신으로 애니메이터를 구성할 수 있다.

- 각 상태에 따른 동작을 StateMachineBehavior로 표현할 수 있다.

- Animation Event를 통해 애니메이션 실행 중 특정 시점에 메소드를 호출할 수 있다.

 

 

Audio

1. Audio Clip

 

오디오 클립 - Unity 매뉴얼

오디오 클립 은 오디오 소스가 사용하는 오디오 데이터를 포함합니다. Unity는 모노, 스테레오 및 멀티 채널의 오디오 에셋(최대 여덟 개 채널)을 지원합니다. Unity에서 임포트할 수 있는 오디오

docs.unity3d.com

2. Audio Source

- 소리를 내는 컴포넌트

 

오디오 소스 - Unity 매뉴얼

오디오 소스(Audio Source) 는 씬에서 오디오 클립을 재생합니다. 이 클립은 오디오 리스너 또는 오디오 믹서를 통해 재생 가능합니다. 오디오 소스는 모든 종류의 오디오 클립을 재생할 수 있으며,

docs.unity3d.com

3. Audio Listener

- 소리를 듣는 컴포넌트

 

오디오 리스너 - Unity 매뉴얼

오디오 리스너(Audio Listener) 는 마이크 같은 디바이스 역할을 합니다. 씬에서 주어진 오디오 소스로부터의 입력을 수신하여 컴퓨터 스피커를 통해 사운드를 재생합니다. 대부분의 응용 프로그램

docs.unity3d.com

 

 

UGUI

1. Canvas

- UI를 배치하는 컴포넌트

- 모든 UI 오브젝트는 Canvas의 자식으로 존재해야 한다.

 

캔버스 - Unity 매뉴얼

모든 UI 요소는 Canvas 안에 위치해야 합니다. 캔버스는 Canvas 컴포넌트가 있는 게임 오브젝트이며 모든 UI 요소는 반드시 어떤 캔버스의 자식이어야 합니다.

docs.unity3d.com

1) Render Mode

- Screen Space - Overlay : 스크린 공간에 덧씌어지는 UI로 Main UI를 표현하는 데 사용

- Screen Space - Camera : 특정 카메라로부터 일정 거리에 배치된 UI

- World Space : 가상 세계에 배치되는 UI

 

2) RectTransform

- Canvas 상에서의 위치, 너비, 높이, 앵커, 피봇, 스케일,회전 등을 표현하는 컴포넌트

 

2. Layout

- Layout Group : Layout Element를 관리하며 Layout을 구성하는 컴포넌트

- Layout Element : 구성 요소

 

3. Visual Component

- 단순히 정보를 제공하는 UI

   ( Text / TMP / Image )

 

4. Interactive Component

- 유저와 상호작용할 수 있는 UI

  ( Button / Toggle / Toggle Group / Slider / ScrollBar / Dropdown / Input Field / Scroll View )

 

 

Prefab

 

프리팹 - Unity 매뉴얼

Unity의 프리팹 시스템을 이용하면 게임 오브젝트를 생성, 설정 및 저장할 수 있으며, 해당 게임 오브젝트의 모든 컴포넌트, 프로퍼티 값, 자식 게임 오브젝트를 재사용 가능한 에셋으로 만들 수

docs.unity3d.com

- 재사용 가능한 GameObject

- Scene에 동일한 GameObject를 배치하거나, 프로그램 실행 중 인스턴스화를 할 때 사용

 

 

Resource Management

1. Resources API

- Resources 라는 특정 폴더에 있는 여러 에셋을 불러올 수 있다.

- 현재는 최적화 이슈 때문에 사용되지 않는다. (빌드된 결과가 커짐)

 

2. Addressable System

 

 

Scriptable Object

- 공통된 데이터에 대해 단 하나의 인스턴스만 만들 때 사용한다.

 

 

Tip

1. Unity GC (가비지 컬렉터)

- 압축이 일어나지 않아 메모리 단편화가 발생하기 쉽다.

- 참조 타입의 객체를 생성할 때는 항상 주의해야 한다.

   - Object Pooling으로 미리 사용할 객체를 다 만들어 재사용한다. (Active true/false)

   - 2021 버전에는 Unity에서 ObjectPool을 지원한다.

 

2. Hash값 사용하기

- Animator나 Material 사용 시 해시값 사용 (Animator.StringToHash)

 

3. UnityEngine.Object

- 서브 클래스에 대해서 Null 체크 되도록 피하기

- Update() 같은 반복적으로 호출되는 메소드에서 Null 체크 하지 않도록 주의한다. (무거움)

 

4. Attribute

 

Unity - Scripting API: SerializeField

When Unity serializes your scripts, it only serializes public fields. If you also want Unity to serialize your private fields you can add the SerializeField attribute to those fields. Unity serializes all your script components, reloads the new assemblies,

docs.unity3d.com

- Header

- SerializeField

- Conditional

- RequireComponent

- ContextMenu

- Space

- Tooltip

- TextArea

- Range

등...

 

5. C# Job System

 

C# 잡 시스템 - Unity 매뉴얼

Unity C# 잡 시스템(Job System)을 사용해 Unity 엔진과 상호작용하는 간단하고 안전한 멀티스레드 코드를 작성하여 게임 성능을 개선할 수 있습니다.

docs.unity3d.com

 

728x90

'Program > Unity' 카테고리의 다른 글

직렬화 (Serialization)  (0) 2023.03.08
Mono & IL2CPP  (0) 2023.02.07
나중에 활용  (0) 2022.08.04
Quaternion  (0) 2022.07.14
PlayerPrefs 경로  (0) 2022.07.14

+ Recent posts