-
내일배움캠프 40일차 TIL - 2D 게임 심화 개발 1TIL/Unity 2024. 6. 12. 21:02
[한 줄 요약]
유니티 심화 주차 강의를 시청하고 파티클과 사운드를 학습하였으며, 특강으로 인풋 시스템에 대하여 학습하였다.
[학습 내용]
유니티 심화 주차 강의
파티클(Particle)
파티클 시스템
2D 및 3D에서 다양한 이펙트를 제작하는 데 활용되는 컴포넌트다. 많은 양의 작은 2D 또는 3D 오브젝트(파티클)들을 관리하고 동작과 생애를 제어한다. 시간에 따른 파티클의 행동을 시뮬레이션하며, 위치, 속도, 수명, 색상, 크기 등의 정보를 저장한다.
주요 컴포넌트
발사체(Emitter), 파티클(Particles), 애니메이터(Animator), 렌더러(Renderer) 등
주요 모듈
- Main 모듈 : 파티클의 속도, 크기, 회전, 최대 파티클 수 등을 정의
- Renderer 모듈 : 파티클을 어떻게 표현할지에 대한 정의
- Shape 모듈 : 박스, 콘, 도넛 등, 생성되는 모양에 대한 정의
- Emission 모듈 : 1초당 생성량, 움직일 때 생성될 양, 버스트 생성 패턴 등을 정의
애니메이션 이벤트(Animation Event)
애니메이션 이벤트
애니메이션이 진행되는 동안 코드를 실행할 수 있다. 호출되는 함수는 Public으로 선언되어있어야 하며, 0 ~ 1개의 매개변수를 가져야 한다.
사운드 처리
AudioClip
사운드 파일을 유니티에서 사용할 수 있도록 지원하는 데이터 타입이다. .wav, .mp3, .ogg 등 다양한 형식을 지원한다.
AudioSource
사운드를 재생하는 데 사용되는 컴포넌트이다. AudioClip을 연결하여 사용할 수 있고, 3D 사운드 설정, 볼륨 조절, 반복 재생 등의 기능을 제공한다.
AudioListener
사운드를 듣는 포인트를 나타내는 컴포넌트이다. 게임에 하나의 AudioListener만 있어야 하며, 주로 메인 카메라에 위치한다.
Input System 특강
InputSystem의 여러가지 방식
다이렉트 방식 (레거시와 유사)
Keyboard keyboard; Mouse mouse; Gamepad gamepad; private void Start() { keyboard = Keyboard.current; mouse = Mouse.current; gamepad = Gamepad.current; } private void Update() { if (keyboard.aKey.isPressed) // isPressed = 누르고 있는 동안 계속 { // 처리 } if (mouse.scroll.ReadValue() > 0) // 마우스 스크롤 { // 처리 } if (gamepad.aButton.isPressed) { // 처리 } }
임베디드 방식
public float dir; public InputAction moveAction; private void OnEnable() { moveAction.started += PlayerMove; moveAction.canceled += PlayerStop; moveAction.Enable(); } private void PlayerMove(InputAction.CallbackContext value) // 매개변수 필수 { dir = value.ReadValue<float>(); } private void PlayerStop(InputAction.CallbackContext value) { dir = 0; } private void OnDisable() { moveAction.started -= PlayerMove; moveAction.canceled -= PlayerStop; moveAction.Disable(); }
액션 에셋 방식
public InputActionAsset inputAsset; private InputActionMap basic; private InputAction move; private InputAction jump; private void OnEnable() { basic = inputAsset.FindActionMap("basic"); move = basic.FindAction("Move"); move.performed += PlayerMove; move.Enable(); } private void PlayerMove() {}
C# 제너레이트 방식
PlayerInput input; private void OnEnable() { input = new PlayerInput(); input.Basic.Move.Performed += PlayerMove; input.Basic.Move.Canceled += PlayerStop; input.Enable(); }
유용한 기능
UI 제어
Interaction
- Hold
- Press Point : 입력값이 0 ~ 1 사이인 값일 때 어느 시점에서 키가 눌린 판정을 할지
- Hold Time : Performed일 때 얼마나 오랫동안 누를 때 키가 눌린 판정을 할 것인지
- Tap
- Max Tap Duration : 누른 뒤 얼마나 빨리 키를 떼야할지
- Slow Tap
- 최소한 키를 눌러야 하는 시간
- Hold와 다른 점은 Hold는 일정 시간이 지나면 자동으로 작동하지만 이것은 시간이 지나고 키를 떼야 작동한다.
- Press
- Multi Tap
- Tap Count : 키 입력 횟수
- Max Tap Spacing : 다중 입력 사이 시간
Processors
- Invert : 키 입력이 반대로 동작함
- Normalize : 정규화
- Clamp : 최댓값과 최솟값 사이로 만들어줌
- Axis Deadzone : 입력 최소치에 대한 오차 보정
키 리바인딩
Package Manager의 Input System 탭의 예제 샘플 참고
[회고]
발제와 SA 작성에 생각보다 많은 시간이 투자되어 많은 학습을 하지 못한 거 같아서 아쉽다. 주말에 시간이 없으므로 조금 더 빨리 강의 진도를 빼야겠다.
'TIL > Unity' 카테고리의 다른 글
내일배움캠프 42일차 TIL - 3D 게임 심화 개발 (0) 2024.06.14 내일배움캠프 41일차 TIL - 2D/3D 게임 심화 개발 (0) 2024.06.13 내일배움캠프 39일차 TIL - 3D 게임 기초 개발 - 팀 프로젝트 6 (1) 2024.06.11 내일배움캠프 38일차 TIL - 3D 게임 기초 개발 - 팀 프로젝트 5 (0) 2024.06.10 내일배움캠프 37일차 TIL - 3D 게임 기초 개발 - 팀 프로젝트 4 (0) 2024.06.07