본문 바로가기

TIL

[TIL]2024-4-16 / 71일차 - 최종 프로젝트 7주차 2일차

오늘의 코드 카타는 오전 해야 할 것이 있었기에 패스했다.

1. 오늘의 기술 면접 - Unity 의 생명주기(Unity Life Cycle)에 대해서 설명해주세요.

Monobehaviour 클래스를 상속 받는 유니티의 오브젝트들은 Scene에 있는 동안 엔진에서 일정 흐름에 따라 자동적으로 함수를 호출하여 처리가 이루어지는데 이를 유니티 생명주기라고 한다.

 

전반적인 흐름은 크게

시작 - 업데이트 -삭제 및 종료 카테고리의 주기를 가지며

시작 : Awake / OnEnable / Start

업데이트(피직스) : FixedUpdate / Update / LateUpdate / OnTrigger / OnCollision

삭제 및 종료 : OnDisable / OnDestroy / OnApplicationQuit

등의 주요 함수가 있다.

세부적인 내용도 많으나 아무튼 생명주기를 알아야 하는 이유라면

크게 두 가지 이유가 있으니

1. 원하는 시기에 원하는 기능을 발생 시킬 수 있어야 하고

2. 생명주기에 맞는 개발을 통해 리소스를 효율적으로 사용할 수 있기 때문이다.

 

 


2. 오늘의 작업 내용

 

오늘도 역시나 플레이 테스트를 하며 각종 잔잔바리 수정을 해야했다.

플레이어 둘이 겹쳤을 때에 소트 오더 문제로 인해 서로 겹쳐 보이는 현상을 위해

플레이어용 레이어를 2가지로 구분 한 뒤

현재 로컬 플레이어(내가 조종 중인 캐릭터)를 찾아 Start에서 레이어를 바꿔주도록 했다.

이는 각 클라이언트끼리 따로 적용되기 때문에 서로 자기 화면에서는 자기 캐릭터가 앞에 나오게 되는 것이다.

 

이외에도 각 오브젝트 별 기능을 구분하던 중

스트롱 박스(공격을 막을 수 있는 박스 - 들 수 있음 - 날릴 수 있음)와

쉴드(공격을 막을 수 있는 들고 다니는 물건 - 들 수 있음)이

서로 기능이 너무 겹치는 점을 느껴 이를 구별하기 위한 방법을 생각해 보았는데,

스트롱 박스에게 체력을 주어 무제한 막지 못하도록 하자는 의견이 나왔다.

 

기존 대미지 시스템이 체력을 가지지 않는 만큼 이를 위해선 이러한 오브젝트들을 위해 특별한 로직이 필요했고

이를 위해 기존 인터페이스의 TakeDamage 메서드를 virtual로 바꾸어 이러한 오브젝트들이 override할 수 있도록 하였다.

 

그래서 스트롱 박스는 체력을 가져 화살과 같은 단타성 투사체는 막기 좋으나 레이저와 같은 강력한 다중 타격 오브젝트들에는 바로 파괴되도록 하였다.

 

아무튼 그렇게 쉴드도 역할을 가지게 되었고 아래는 쉴드의 시연화면이다.

 

 

 

 

또 이런 체력을 만들고 나니 생긴 아이디어로

벽 중에서도 이런 식으로 파괴하여 넘어갈 수 있는 장애물을 만들면 재미있을 것 같아

이를 만들게 되었다.

 

여기에도 여태 배운 파티클 시스템과 애니메이션을 이용해 꽤나 보기 좋은 파괴 모션이 나왔다.

 

 

스트롱 박스와 마찬가지로 단타로는 오래 걸리나 레이저 등은 곧바로 부시게 된다.