개요
유니티에 대한 기본적인 것도 모르면서 취업하려고?
Unity
Unity Editor
유니티에 어떤 버튼들이 있고 버튼들로 무엇을 할 수 있는지 알아야한다.
- Toolbar / Hierarchy / Window / Game View / Scene View / Overlays / Inspector Window / Status Bar
- 이 외의 UI는 Window 메뉴에서 열 수 있다.
- 간단한 조작법은 알아야 한다.
Scene & GameObject
1. Scene
- Scnen은 콘텐츠를 사용하여 작업하는 공간으로, 게임이나 어플리케이션의 전체 또는 일부를 포함하는 에셋이다.
- 스크립트에서는 [SceneManager]를 이용해 씬을 로드할 수 있다.
2. GameObject
- 유니티에서 존재하는 모든 오브젝트를 말한다.
- GameObject는 그 자체로 많은 것을 하기보다는 기능을 구현하는 컴포넌트의 컨테이너 역할을 한다.
- GameObject는 계층적으로 다른 GameObject를 가질 수 있다.
- 모든 GameObject는 Transform을 가진다.
- Transform은 좌표계에서의 위치, 회전, 스케일을 표현한다.
- Transform은 월드 혹은 부모 GameObject로부터의 상대적인 좌표를 나타낸다. (World=World, GameObject=local)
1) Transform
- GameObject는 좌표는 Transform 컴포넌트로 표현된다. (모든 GameObject는 Transform을 가진다.)
- GameObject는 부모 혹은 자식 게임 오브젝트를 가질 수 있다.
- GameObject가 부모를 가질 시, Transform은 부모로부터 상대적인 Transform을 나타낸다. (Local 좌표계)
- GameObject가 부모가 없을 시, World 좌표계로 나타낸다 (World가 부모)
- 변화가 없는 GameObject는 Static으로 설정 (최적화) <-> Dynamic GameObject
- 프로토타입을 만들 때 사용하는 Primitive GameObject가 있다 (Cube / Sphere / Capsule 등)
2) Components
- 모든 GameObject의 기능적인 단위. 즉, 하나의 기능을 담당하는 스크립트.
( 시각적인 기능 / 물리적인 기능 / 행위(다른 객체에게 메시지를 전달)의 기능 )
- Unity는 다양한 Component를 내재하고 있다.
- 우리만의 Component를 작성하기 위해서는 C# 문법을 알고 있어야 한다.
- Public 필드의 경우 Unity Editor 상에서 인터페이스로 나타난다.
- 혹은 SerializeField 특성을 사용
- 모든 Component는 MonoBehaviour를 상속 받는다.
( MonoBehaviour에는 Unity 엔진에 의해 호출되는 여러 이벤트 메시지가 정의되어 있다. )
- 각 이벤트 메시지가 언제 호출되는지 정확히 알아야 정확한 구현이 가능하다.
Input (입력)
- Input Manager : Unity에 내장된 기본 입력 방법
- Input System : 추가 패키지
Interaction ( 상호작용 / Collision : 충돌 )
1. Layer
- GameObject가 어떤 다른 것과 상호작용할 수 있는지 정의.
- Layer Matrix를 설정 방법을 알아야 함
- Layer 체크는 비트를 사용
- Layer는 0번부터 31번까지 존재함
2. Character Control
- 아래의 두 방법은 게임 플레이 설계에 따라 다르게 적용한다.
1) Rigidbody
2) Character Controller
3. Rigidbody
- 물리 기능을 제공하는 컴포넌트
- Collider와 함께 사용해서 충돌 처리에 사용
- Kinematic Rigidbody : 물리 엔진 대신 스크립트에 의해서 동작하는 Rigidbody
- Rigidbody는 최상위 GameObject (Root)에 단 하나만 부착해야 한다.
- Joints
- Rigidbody를 Rigidbody한테 연결
4. Collider
- 물리적인 표면을 제공하는 컴포넌트
( 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
- 시간에 기반한 동작을 편하게 구현할 수 있는 서브루틴
- StartCoroutine()으로 코루틴을 시작할 수 있고, StopCoroutine()으로 코루틴을 중지할 수 있다.
* StopCoroutine()은 진행중인 코루틴의 매개변수와 동일한 매개변수를 넣어야 멈출 수 있다.
- 코루틴은 반드시 GameObject가 Active여야 한다.
- 코루틴은 Update() 이후에 실행된다.
Animation
- 유한 상태 머신으로 애니메이터를 구성할 수 있다.
- 각 상태에 따른 동작을 StateMachineBehavior로 표현할 수 있다.
- Animation Event를 통해 애니메이션 실행 중 특정 시점에 메소드를 호출할 수 있다.
Audio
1. Audio Clip
2. Audio Source
- 소리를 내는 컴포넌트
3. Audio Listener
- 소리를 듣는 컴포넌트
UGUI
1. Canvas
- UI를 배치하는 컴포넌트
- 모든 UI 오브젝트는 Canvas의 자식으로 존재해야 한다.
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
- 재사용 가능한 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
- Header
- SerializeField
- Conditional
- RequireComponent
- ContextMenu
- Space
- Tooltip
- TextArea
- Range
등...
5. C# Job System
'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 |