728x90
반응형
SMALL

unity 56

콜라이더 사이즈가 음수일 때 벌어지는 일

오늘은 박스 콜라이더 사이즈가 음수일 때 발생할 수 있는 일에 대해서 작성해보겠다.우선 콘솔창에 경고문이 많이떠서 매우 보기안좋다. 난 이게 제일 큰 문제라고 생각한다. 농담이고 실제로 무슨 일이 발생하는지 한 번 알아보자. 먼저 물리 연산에 이상이 생길 수 있다.Unity의 PhysX(물리 엔진)는 콜라이더가 음수 사이즈를 가지는 걸 정상으로 취급하지 않는다.따라서 콜라이더가 뒤집혀서 충돌이 제대로 안 되거나, 충돌 판정이 아예 사라지거나 반대로 작동할 수 있다. 두번째, 충돌 방향이 반전이 될 수 있다.음수 스케일은 법선(Normal) 방향을 반대로 뒤집을 수 있다.따라서 총알에 맞았을 때 반응이 이상하거나, Raycast로 충돌 판정할 때 빗나가는 문제가 생길 수도 있다. 세번째, Trigger 이..

TIL 2025.04.28

게임 개발자 기술면접 질문

오늘은 캠프에서 모의 면접을 봤다. 질문은 이러했다.1. Update의 종류와 각각 어떤 특징을 가지고 있는지Updata의 종류로는 대표적으로 Update, FixedUpdate, LateUpdate 세 가지가 있습니다. 먼저 Update는 프레임마다 한 번씩 실행되는 메서드로, 주로 입력 처리나 일반적인 로직에 사용됩니다. 이 업데이트는프레임마다 실행되므로 누가 플레이하냐에 따라서 프레임단위가 다르기 때문에 이 점을 보완하기 위해FixedUpdate를 사용합니다.FixedUpdate는 일정한 간격으로 실행되며, Rigidbody와 관련된 물리 연산에 적합합니다. 물리 연산은 불규칙한 프레임에 따라 처리하면 결과가 달라질 수 있기 때문에, 일정한 간격으로 처리되는 FixedUpdate에서 다루는 것이 안..

TIL 2025.04.25

UIScoreboardView(점수판, 상황판) 트러블슈팅

오늘은 스코어보드에 문제가 있었다. 무슨 문제였냐면 새로운 플레이어가 들어오면 상황판에 새로 들어온 플레이어가 떠야하는데 안뜨는 문제였다.우선 왜 안떳냐면 저렇게 rowParent 자식으로 로우프리팹을 생성을 시켰다. 하지만 저 위치에 생성되지 않고엉뚱한 위치에 생성이 됐다. 그래서 안뜨는 것이었다. 근데 왜 엉뚱한 위치에 생성이 됐냐면 바로 네트워크비헤이비어를 받은 스코어매니저에 UIScoreboardView를 인스펙터에서 직접 할당받아서 UIScoreboardView는 기본 오브젝트였는데 네트워크 오브젝트처럼 동작이 되는 문제였다. 그래서 나는 인스펙터에서 할당이아닌 인스턴스로 받아오는 방법으로 했다.이렇게하니 UI프리팹이 네트워크 오브젝트가 아닌 기본 오브젝트가 되면서 내가 원하는 위치에 생성이 됐..

TIL 2025.04.24

Fusion 기반 FPS 게임에서 실시간 상황판 UI 구현하기

나는 오늘 FPS 멀티플레이 게임에서 상황판(스코어보드)을 만들었다.Unity와 Fusion을 이용하여 플레이어의 킬, 데스, 골드를 실시간으로 보여주는 상황판 UI를 어떻게 구현했는지정리해 보겠다. 우선 사용한 스크립트들이다.StandardSpawner: 플레이어와 UI매니저를 생성하는 네트워크 스폰 담당ScoreboardManager: 점수 데이터를 관리하고 UI 갱신을 담당하는 네트워크 싱글톤UIScoreboardView: 실제 화면에 보여지는 UI 요소들 관리PlayerScoreData: 각 플레이어의 킬/데스/골드를 담는 네트워크 구조체 먼저 퓨전에서는 INetworkStruct를 구현한 구조체로 네트워크 동기화 가능한 데이터를 정의할 수 있다. 다음은 스코어보드매니저 스크립트다.서버에서 점수 ..

TIL 2025.04.23

Unity Fusion 멀티플레이 FPS ScoreboardUI 구현하기

나는 오늘 FPS게임에서 탭을 누르면 볼 수 있는 상황판을 만들었다. 상황판에는 뭐를 띄웠냐면 닉네임, 킬, 데스, 보유골드가 뜨게 만들었다.우선 상황판은 UIScoreboardView 라는 스크립트에서 관리를 했고,각 플레이어의 정보를 보여주는 UI 요소는 UIScoreboardRow 프리팹을 통해 구현했다. 이것은 사용된 주요 데이터이다. 다음은 UI 구성 로직을 어떻게 짰는지 보여주겠다.플레이어 수만큼 Row 인스턴스를 생성해서 UI에 붙인다.그리고 기존 Row 재사용을 위해 SetActive로 관리해준다. 그리고 그 붙인 UI들에게 데이터들을 넣어준다.약간 두루뭉술하게 설명했지만 다음에 더 자세히 공부해서 하나하나 뜯어서 선보여보겠다.

TIL 2025.04.22

싱글톤 패턴에 대하여

오늘은 저녁먹고나서 튜터님이 소규모로 강의를 해주셨다.Singleton 패턴과 UIManager에 대해서 배웠다.UIManager는 이미 지금 짜고있는 방식과 같기때문에 오늘은 Singleton 패턴에 대해서 어떻게로직을 짜는지 알아보겠다. 우선 싱글톤이란??싱글톤 패턴은 어플리케이션 전체에서 오직 하나의 인스턴스만 존재해야 하는 클래스를 만들기 위한 디자인 패턴이다.대표적인 예로 GameManager, AudioManager, UIManager 등이 있으며, 이들은 전역에서 접근이 가능해야 하고 중복 생성되면 안된다. 그럼 이 싱글톤을 어떻게 작성하는지 보겠다.우선 싱글톤클래스를 만드는데 제레닉 클래스를 선언한다.그러면 게임매니저 같은 스크립트에 예를 들어서public class GameManager ..

TIL 2025.04.21

게임회사 면접 질문에 대한 답변

오늘은 모의면접을 봤다.사전에 미리 질문을 두개를 알려줘서 무난하게 답변하고 피드백 받을 수 있었다.질문은 이러했다.1. 객체지향이란?2. 유니티 생명주기란? 객체지향에 대한 나의 대답을 서술해보겠다.객체지향은 프로그램을 구성할 때 모든 데이터를 객체라는 개념으로 추상화해서 유지보수와 확장성이 좋은 코드를 만드는 프로그래밍입니다. 제가 팀 프로젝트를 진행할때 저는 Projectile을 담당했었는데, 시각적인 역할을 하는 더미발사체와 실제 물리 판정이 있는 실제 발사체를 따로 만들어서 그 발사체들의 공통된 인터페이스나 베이스 클래스를 둘 수 있도록 구현했습니다. 따라서 객체지향의 특성 중 캡슐화와 다형성을 이용하여 협업에 도움이 많이 된 경험이 있습니다. 이런식으로 답변했는데 경험을 녹아내서 말하는 것도..

TIL 2025.04.18

유니티 밝기 설정 구현하기

오늘은 설정창을 구현했다. 그 중에 밝기 설정을 정리해보겠다. 우선 스크립트를 만들어 오브젝트를 받아온다.슬라이더, 알파값을 조절할 이미지, 밝기 텍스트이다. 다음은 밝기 조절 함수이다. 매우 간단하니 놀라지 말것.검정색 이미지의 알파값을 설정하는데 알파값이 올라가면 화면이 어두워진다.알파값은 Mathf.Min((1f - value) * 0.9f, 0.9f);를 이용하여 알파값이 0에서 0.9사이로 설정하게 했다.왜냐하면 알파값이 1이되면 화면이 아예 안보여서 제한을 뒀다. 이 검정색 이미지를 전체화면으로 해서 알파값을 조절하는 방식이다. 물론 이 방법 말고 더 좋은 방법이 있겠지만 우선은 빠른 기능구현을 위해 패스하고 나중에 리팩토링해보겠다.

TIL 2025.04.17

기초부터 탄탄하게! - RPC편

오늘은 RPC에 대해서 TIL을 작성해보겠다. 우선 RPC란?Remote Procedure Call, 즉 원격 프로시저 호출을 얘기한다.네트워크 상의 다른 컴퓨터에서 특정 함수를 마치 로컬 함수처럼 호출할 수 있게 해주는 기술이다.일반적으로 함수를 호출하면 내 PC에서 코드가 실행되지만, RPC를 사용하면 네트워크를 통해 다른 플레이어의 컴퓨터에서 실행되게 만들 수 있다. 그럼 이게 왜 필요해?멀티플레이에서, 내가 총을 쐈을 때, 다른 클라이언트에서도 총소리나 이펙트를 보여줄 때,문을 열었을 때, 모든 플레이어가 열린 문을 봐야할 때,내 캐릭터가 점프했을 때, 서버나 다른 클라이언트에게도 그 정보를 보내야 할 때,이럴 때 직접 함수 호출을 할 수 없고, RPC를 사용해 네트워크로 알리는 방식을 써야한다...

TIL 2025.04.15

Unity UI시스템 구현에 대한 설명

오늘은 저번 글에 이론적으로 설명했던 부분들을 직접 코드로 구현해보았다.나도 100퍼센트 이해한것은 아니라서 설명이 미숙할 수 있다.오늘도 코드로 설명보다는 말로 설명해보겠다. 코드로 설명은 내가 이해가 100퍼센트되면 하는걸로. 우선 이 UI시스템은 모듈화와 재사용성에 중점을 두고 구성되어 있으며, 스크린 전환, 팝업 처리, 리소스 관리를각각의 책임으로 분리하여 유연한 UI구성을 가능하게 했다. 내가 작성한 스크립트들의 각 역할들을 설명하겠다. 먼저 UI의 중심 허브인 UIController이다.먼저 UIScreen을 Type 기준으로 관리하여, 유연한 스크린 전환을 가능하게 해야한다.IPopup 인터페이스 구현체를 자동으로 찾아 팝업 처리를 담당하게 한다.Get() - 특정 스크린을 가져오는 함수이다..

TIL 2025.04.14
728x90
반응형
LIST