728x90
반응형
SMALL

unity 56

게임 개발자 모의면접 질문답변(유니티)

오늘은 모의 면접을 진행하였다. 내가 답한 답변과 피드백을 정리해보겠다.1. 가비지 컬렉터란?2. 박싱/언박싱에 대해서 나의 답변이다.- 가비지 컬렉터란? 가비지 컬렉터는 더 이상 사용되지 않는 메모리를 자동으로 해제해주는 메모리 관리 시스템입니다. C#에서는 new 키워드로 생성된 객체가 힙에 저장되고, 해당 객체에 대한 참조가 모두 사라지면 가비지 컬렉터가 이를 감지하고 메모리를 회수합니다. 하지만 가비지 컬렉터는 예측할 수 없는 시점에 실행되며, 이때 프레임 드랍이 발생할 수 있기 때문에, Update나 FixedUpdate 같은 반복적인 루프에서 할당을 피하고, 오브젝트 풀링(Object Pooling) 같은 기법을 사용해 할당/해제를 최소화하는 것이 중요합니다.피드백: 답변 스무스하고 괜찮았는..

TIL 2025.05.15

Fusion 기반 몬스터 공격 패턴 구현

나는 오늘 몬스터 공격 패턴을 구현하였다.구현하면서 배운것들을 정리해보겠다. 1. 몬스터 상태 머신을 통한 공격 패턴 분리MonsterStateNetworkBehaviour 기반으로 몬스터 패턴(Bowmeter_Pattern1) 구성Enter()에서 이동 속도 정지 및 발사체 스폰 처리Bowmeter_Phase_Chase에서 거리 기반으로 다음 공격 패턴 결정 (CaculateAttackType() 사용)2. TickTimer를 활용한 스킬 쿨타임 관리TickTimer[] skillCoolDown 배열을 통해 스킬별 쿨타임 설정TickTimer.CreateFromSeconds(Runner, seconds) 로 설정하고 .ExpiredOrNotRunning(Runner) 로 체크3. Fusion에서의 네트..

TIL 2025.05.14

FPS 좀비게임 생체경보기 구현하기 - 완성

오늘은 생체경보기에 구현에 대해서 작성해보겠다. 생체경보기를 어떻게 기획했냐면생체경보기 구역에 플레이어가 들어가면 5~ 30초 뒤에 사이렌이 울리며 근처에 좀비들이 쫓아오는 기획이다.왜 5~30초 뒤에 울리냐? 하면 만약 들어가자마자 소리가 울리면 게임을 플레이 하는 사람들은 이제 아 여기가사이렌구역이구나 기억하면서 그 구역을 피할 것이다.그런 상황을 방지하기 위해 뒤늦게 사운드가 재생되도록 하였다. 코드로 이제 보여주겠다.Siren 클래스이다.여기서는 어떤 역할을 하냐면 플레이어가 생체경보기구역에 들어왔는지 판단해서, isTrigger값을 true로 만들어주고,사운드를 RPC로 재생하는 역할이다.이 클래스는 MonoBehaviour를 상속받기 때문에 RPC함수를 작성하지 못하여 스크립트를 하나 더 만들..

TIL 2025.05.13

유니티 개발자 면접 질문과 답변

오늘은 개발자 면접 질문에 대한 답변 정리한 것을 서술해보겠다.질문은 1. 스택과 힙 메모리의 차이2. Find 함수 사용을 자제해야 하는 이유이다. 먼저스택과 힙 메모리의 차이에 대한 내 답변이다. 스택과 힙은 프로그램 실행 시 사용하는 메모리 영역으로 특성과 사용 방식에 차이가 있습니다. 스택은 지역변수나 매개변수가 저장되는 영역으로, 선입후출 구조를 따릅니다. 반면 힙은 런타임 중 동적으로 메모리를 할당할 때 사용하는 영역으로, 주로 객체나 대용량 데이터를 저장할 때 사용됩니다. 스택은 컴파일러가 자동으로 메모리를 할당하고 메서드 실행이 끝나면 자동으로 해제되기 때문에 속도가 빠르고 메모리 관리의 부담이 적은 반면, 힙은 메모리를 직접 할당하고 해제해야 하기 때문에 속도는 다소 느리지만, 스택보다..

TIL 2025.05.12

FPS 멀티플레이 게임에서 생체경보기 구현하기(Fusion2) - 준완성

오늘은 생체경보기 구현을 끝마쳤다. 아직 미완성이긴하지만.생체경보기가 울리면 좀비들의 플레이어 감지범위가 일정시간 늘어났다가 다시 원래대로 복구되는 구조이다. 코드 설명 보여주겠다.우선 Siren이라는 스크립트이다.여기서 플레이어가 트리거구역에 들어갔는지 체크하고 RPC를 쏴서 다른 플레이어들에게도 영향을 주게했다.RPC함수는 MonoBehaviour를 상속받는 스크립트에서는 작성을 하지 못하니 SirenController라는 스크립트를 하나더 만든다. 이것이 바로 사이렌을 관리해주는 사이렌컨트롤러 스크립트이다.여기서 사운드를 관리해주고, 좀비들의 감지범위를 조절해준다.코루틴을 이용해서 트리거구역을 한 번 들어가면 420초, 즉 7분동안은 다시 들어가도 발동이 안되도록 하였으며,한 번 들어갔을 때 좀비들..

TIL 2025.05.09

FPS 멀티플레이 게임에서 생체경보기 구현하기(Fusion2) - 미완성

오늘은 생체 경보기를 구현해보겠다. 우선 생체경보기를 어떤 식으로 구현을 할것이냐?플레이어가 특정 장소에 들어간다. 그러면 사이렌 사운드가 울리며 좀비들이 소리가 울린 곳으로뛰어오게 만드는 것이 목표이다.나는 우선 오늘은 소리가 나는 것만 구현했다.자 그럼 코드를 보여주겠다. 우선 레이어를 판별할 변수와, 특정 장소안에 들어갔는지 체크하는 bool값을 선언해준다.그리고 사이렌소리를 내줄 오디오를 할당하기 위해 SerializeField로 선언한다. 그리고 트리거엔터로 플레이어가 생체경보기 구역에 들어갔을 때 실행될 코드를 짜준다.나는 생체경보가 한 번 울리면 7분동안 안울리게 하게 하고싶어서 코루틴으로 420초동안은 _isTrigger가 트루였다가그 후에 다시 false로 바껴서 다시 동작하도록 했다.그..

TIL 2025.05.08

상황판에 2명까지 밖에 안 뜨는 오류(어이없음 주의)

나는 상황판을 구현했는데, 계속 점수판에 호스트, 클라이언트1 까지만 뜨고.클라이언트 2부터는 아예 뜨지 않았다. 그래서 챗GPT에게도 물어보고, 구글링도 해봤는데. 무슨 머 초기화 순서니 뭐니타겟설정이니 뭐니 모든 방법을 다 동원해도 안됐다. 그런데!!!!!!!!!!!!!!!!!!!!아주 기본적인 이유로 안됐던 것이었다. 바로저런식으로 용량을 직접적으로 명시를 안해주면 기본 용량으로 설정된다.나는 에이 기본 용량이 뭐~ 4명까진 그래도 뜨겟지~~ 생각했다.하지만....모든 방법을 총동원하고 실패해서 좌절하고 있던 나에게 마지막 방법이라 생각하고 에이~ 설마 이거겠어~하고카파시티(32)를 선언해주어 용량을 명시적으로 설정했다.그러자...!!해결완료오....그렇다. 나는 멍청했다..

TIL 2025.05.07

Unity FPS게임 민감도 설정 구현하기

오늘은 민감도 설정을 구현하려고 한다.사실 어려운건 아니다. 쉬운 편에 속하는데 뭐때문인지 오류가 있어 해결하는데 오래 걸렸다.어떻게 작성했는지 알아보자. 우선 민감도 설정에 사용할 슬라이더와 텍스트를 변수로 선언한다. 그리고 민감도 수치가 선언돼있는 플레이어카메라핸들러라는 스크립트도 선언해준다. 그리고 어웨이크에서 플레이어카메라핸들러변수안에 스크립트를 넣어준다.파인드가 싫다면 PlayerCameraHandler를 인스턴스화하거나, 퍼블릭으로 선언해서 직접 유니티에서 할당해주면 된다. 그리고 어웨이크 안에서 이것도 선언해준다. 이게 뭐냐면 슬라이더가 변경값이 있을때마다 내가 작성한SetSensitivity라는 함수를 호출해 값을 변경시킨다는 것이다. 다음으로는 제일 중요한 민감도 설정 함수이다.사실 뭐 ..

TIL 2025.05.02

Unity 민감도 설정 슬라이더 초기화 문제

오늘은 FPS 게임 설정에서 꼭 있어야하는 민감도 설정을 만들었다.그런데 게임 시작 시 항상 민감도 값이 0.5로 초기화되는 문제가 발생했다. 왜 그러냐면 슬라이더의 기본값은 0.5로 되어 있다.그래서 설정창 스크립트에 Awake에서 슬라이더값을 5로 바꾸는 코드를 넣었다.하지만 설정창 UI는 꺼져있는 상태에서 시작을 하기 때문에 Awake가 발동이 안되는 것 같다. 오늘은 시간이 부족해서 아직 해결하지 못했기 때문에 내일 이 근거를 토대로 해결해보겠다. 오늘은 다소 빈약한 글이지만 내일은 실제 해결사례를 들고와서 풍성하게 작성해보겠다.

TIL 2025.04.30

Unity Fusion FPS 게임에서 스코어보드 동기화 구조 이해 및 개선

오늘은 스코어보드에 대해서 다뤘다. 어떤 문제가 있었냐면- 새로 조인한 플레이어가 기존 플레이어들의 스코어보드 정보를 보지 못함- RPC_AddPlayerRow 호출이 전체 클라이언트에게 broadcast되어 기존 정보가 새 클라이언트에게 전파되지 않음 그래서 오늘 내가 배운 개념들에 대해서 정리해보겠다. Fusion의 RPC 대상 지정(RpcTargets)RpcTargets.InputAuthority: 특정 PlayerRef 에게만 RPC를 보낼 수 있다.RpcTargets.All: 모든 클라이언트에 broadcast된다.신규 플레이어 조인 처리 방식 분리모든 클라이언트에 새 플레이어 한 줄 추가: RPC_BroadcastAddPlayerRow조인한 플레이어에게만 기존 플레이어 정보 전달: RPC_Ad..

TIL 2025.04.29
728x90
반응형
LIST