본문 바로가기

내배켐 Unity TIL

(38)
Unity 56일차 TIL - Unity FSM(디자인 패턴) 트러블슈팅 FSM으로 플레이어 이동 및 공격 및 방어를 구현해보면서 문제점이 하나 생겼다.이런식으로 공격 키를 누른 상태에서 이동하거나 Idle 상태에서 공격 키를 계속 누른 상태를 구현하고 싶었는데 Action에서 누른 상태를 인식해서 State를 어떻게 넘겨줘야 될지가 고민이였다. 기존에 Performed가 누른 상태일 때 매번 호출되는 이벤트인 줄 알았었는데 막상 Debug를 찍어보니 1번씩 밖에 호출이 안됐다. 그래서 어떻게하면 각각의 상태에서 공격이나 방어 키를 누르고 있는 상태라는 걸 인식할 수 있고 또 그걸 어떻게 넘겨줘야 될지가 고민이였다. 처음에는 State로 사용하는 Class들이 MonoBehavior를 상속받지 않기 때문에 MonoBehavior를 상속 받는 Player Class 쪽에서 Co..
Unity 55일차 TIL - Unity FSM(디자인 패턴) 이번에 최종 프로젝트를 진행하면서 플레이어 이동 구현을 맡아 이전에 강의에서 배웠던 FSM(Finite State Machine) 유한 상태 머신이라는 디자인 패턴으로 구현해보려고 한다. FSM 개념- FSM은 유한한 갯수의 상태들로 구성된 기계 및 패턴을 뜻한다.- 상태와 상태 간의 전환을 기반으로 동작하는 동작 기반 시스템이다. FSM의 구성 요소- 상태 (State) : 시스템이 취할 수 있는 다양한 상태.- 전환 조건 (Transition Condition) : 상태 간 전환을 결정하는 조건.- 동작 (Action) : 상태에 따라 수행되는 동작 또는 로직 FSM의 동작 원리- 초기 상태에서 시작하여 입력 또는 조건에 따라 상태 전환을 수행- 상태 전환은 전환 조건을 충족할 때 발생하며, 전환 조..
Unity 51일차 TIL - 팀 프로젝트 트러블 슈팅 1. 일괄 판매 후 판매 시 index out of rangeGameManager에 List를 4개를 만들어줬다.- Unit Object를 저장할 List, Unit Object를 생성할 때 부여할 Id, Unit의 Rank, Unit의 Gold처음에는 List를 Unit Object와 Unit Object를 생성할 때 부여할 Id만 만들어뒀다가, GetComponent를 사용하는 게 별로 좋지 않다고 해서 최대한 사용을 덜 하기 위해 Unit 정보의 Rank와 Gold에 대한 정보도 담을 수 있도록 추가했다. 그리고 GameManager를 매번 불러와서 Add 시켜주는 게 비효율적인 것 같아서 GameManager 내에 Add와 Remove 함수를 만들어두고 매개변수를 통해서 List에 삽입하고 제거하..
Unity 47일차 TIL - Unity InputSystem 저번에 특강을 통해서 강의에서 배웠던 InputSystem이 여러 가지 사용법 중 하나라는 것을 알게 됐다. 그래서 추가적으로 다른 사용 방법들에 대해서 정리해 보려고 한다. 1. 다이렉트 방식기존에 사용했었던 Object에 Inspecter 창에서 Player Input을 Component로 추가하지 않고서 사용할 수 있다.using UnityEngine;// using InputSystem을 사용해야 Ketboard, Mouse 등의 Class를 사용할 수 있다.using UnityEngine.InputSystem;public class PlayerInputManager : MonoBehaviour{ public float dir; Keyboard keyboard; Mouse mous..
Unity 41일차 TIL - 팀 프로젝트 2 (마무리) 생각보다 많은 기능을 구현하지는 못했지만 팀 프로젝트가 끝났다. 역시나 다른 분들과 병합하면서 Script에서 문제가 생기는 부분들이 꽤 있었던 것 같다.그래도 문제를 해결하는데에 그렇게 오랜 시간이 걸리지 않아서 별 문제는 없었다. 이번 프로젝트를 진행하면서 Update문과 FixedUpdate문의 호출 빈도? 정도를 체감할 수 있었던 것 같다. 아직 최적화를 어떻게 하는지는 잘 모르겠지만 최대한 Update 문을 사용하는걸 지양할 필요가 있을 것 같다. 추가로 중간에 기존에 Object Pool로 Car Object를 생성하고, 붙어있는 Vehicle Script에 Coroutine을 사용해서 충돌 될 때 SetActive(false)로 바꿔주고 일정 시간이 지난 후에 Reset 해야 될 변수들을 R..
Unity 36일차 TIL - 팀 프로젝트 1 (Unity MiniMap) 오늘은 팀 프로젝트를 시작하는 날이다.우리 조는 RunPizzaRun 모작으로 3D 러닝 액션 게임을 만들기로 했다. 만들 게임을 고르고 나서 간단하게 와이어 프레임을 작성하고, 크게 4가지로 분류했다. 1. 미니맵과 스폰 매니저2. 게임 매니저 (UI + 오브젝트 풀 관리 + 점수 관리 + 시간)3. Player (움직임 + 애니메이션 + 카메라 제어)4. 장애물 (움직임 + 애니메이션 + 오브젝트 풀) 이 4가지 중에서 1번째인 미니맵과 스폰 매니저를 맡게 됐다. 미니맵 만들기1. Project 창에서 Render Text를 생성해 주고 Size를 적절하게 조정해 준다.2. 미니맵용 Camera를 Hierarchy 창에서 새로 만들어준다.3. Camera의 Projection을 Orthographic..
Unity 29일차 TIL - Unity 팀 프로젝트 6 마무리 솔직히 처음 구상하는 단계에서 벽돌 깨기라는 게임이 막상 기능들을 나눠보니 생각보다 빨리 끝낼 수 있겠다는 생각을 했었다. 근데 막상 해보니까 충돌 이벤트들을 나눠서 관리하는 거나, 아이템을 적용시키는 부분, 벽돌을 파괴했을 때 어떻게 카운트 할 건지 등 크게 보면 분명 Ball, Paddle, Wall, Brick, Item 5가지의 Obejct들로 이루어지는 거라 이게 복잡하게 될까 싶었는데 오히려 Object들이 적어지니까 더 복잡해지는 것 같다. 이번 프로젝트는 그래도 초기 구상도 했고, 소통도 잘 했고, 기능들도 2 ~ 3일차 안에 거의 다 구현을 했었는데 RigidBody를 붙인 두 Object의 물리적 영향을 안 주는 방법을 찾아보는데 너무 많은 시간을 뺏겼다. 해결할 수 있는 방법을 알고 ..
Unity 28일차 TIL - Unity 팀 프로젝트 5 (RigidBody Material(Bounce)) Ball이 Paddle과 충돌될 때 법선 벡터를 이용해서 입사각 반사각을 구하는 게 아닌 Material의 Bounce 값을 이용해서 구현을 했었는데 문제가 있었다. 어느 순간  각도 변화 없이 무한 반복으로 횡 혹은 종 움직임이 있어가지고, 처음에는 왜 그런지 몰랐었는데 Debug를 찍어보니 무한 반복으로 이동하기 직전에 y 혹은 x 값이 normalized를 했을 때 기준으로 0.05 정도의 값이 나오면 충돌 이후에 y 혹은 x의 값이 0이 됐다. 정확한 이유는 모르겠지만 Collider에 충돌이 일어난 이후에 y 값과 x 값이 일정 값 이하가 되면 충돌된 이후에 방향이 0으로 변경이 되는구나 하고 생각했다. 그래서 Collider 충돌이 일어나기 직전에 값을 알면 값을 보정해서 넣어줄 수 있겠다고 ..