목록전체 글 (34)
흔한 덕후의 잡동사니

기술 면접을 준비하며, 내가 알고 있는 지식을 바탕으로 관련된 문제들을 정리해보았다. 이 답변들은 반드시 정답이 아닐 수 있으며, 면접관이 기대하는 방향과 다를 수도 있다. 참고할 경우 이러한 점을 감안하고 읽는 것이 좋다. 문제31. Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.더보기Unity 생명주기(Unity Life Cycle)는 Unity 엔진이 스크립트를 실행할 때 호출하는 일련의 함수 흐름이다. 32. MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해 설명해주세요. - MonoBehaviour 클래스에서 `Start`와 `Awake`의 차이점은 무엇이며, 이를 적절히 사용하는 방법에 대해 설명해주세요.더보기MonoBehaviour는 Unit..

기술 면접을 준비하며, 내가 알고 있는 지식을 바탕으로 관련된 문제들을 정리해보았다. 이 답변들은 반드시 정답이 아닐 수 있으며, 면접관이 기대하는 방향과 다를 수도 있다. 참고할 경우 이러한 점을 감안하고 읽는 것이 좋다. 문제1. 객체란 무엇인가요? 클래스와 어떤 연관이 있나요?더보기 객체(Object)는 클래스(Class)의 설계도를 바탕으로 실제로 메모리에 생성된 구체적인 실체이다. 클래스가 데이터와 행위를 정의하는 일종의 틀이라면, 객체는 이 틀을 이용하여 만들어진 실체로서 상태(데이터)와 행동(메서드)을 가진다. 예를 들자면 다음과 같다.#include #include // 클래스 정의class Player {public: std::string name; int hp; // 생..
MMO 게임은 수많은 오브젝트가 존재하며 플레이어는 맵을 돌아다니며 다른 플레이어들과 상호작용할 수 있다. 모든 플레이어가 서로의 움직임을 관찰하려 하면, 서버는 처리할 패킷 수가 N²로 급증한다. 이를 방지하기 위해 서버는 맵을 그리드로 나누어 관리하고, 각 구역을 섹터라 부른다. 플레이어가 섹터 간 이동을 하면 이전 섹터 주변의 플레이어들에게는 플레이어가 사라졌음을 알리고, 새로운 섹터 주변의 플레이어들에겐 새로운 플레이어가 왔음을 알린다. 이 방식으로 플레이어 간 상호작용 범위를 제한하여 서버 부하와 패킷 전송량을 크게 줄일 수 있다. 그렇담면 이를 어떻게 구현할까? 1. 고정 그리드 섹터 방식 맵을 일정 크기의 정사각형 섹터로 분할하고, 오브젝트는 위치에 따라 특정 섹터에 속함. 예: 섹터 크기..
BT를 서버에 이식하는 결정을 내린 계기더보기포폴로 C++서버와 Unity 클라이언트로 게임을 만들고 있다. 아직까진 MMORPG가 될지 MORPG가 될지 모르겠다. 우선 AI를 각 클라이언트에서 만들고, 서버에선 동기화만 하는 방식을 사용하려했는데, 충돌체 검증여부가 서버에 있고, 나중에 물리도 서버에서 만든것을 dll로 빼서 유니티에 이식알 예정이라 서버에서 AI에 대한 검증을 할 필요가 생겨버렸다. 애니메이션 제어라던지 UGS(UnityGoogleSheet)도 사용해볼겸 클라이언트에선 FSM형식으로 애니메이션 트리거만 제어하고, 피격 및 상태 제어는 서버에서 하는 방식이 제일 좋은 것으로 결론을 내리고 개발에 착수했다. BT의 설계에 관해선 위키피디아에 있는 내용과 언리얼 엔진이 제공하고 있는 BT..
C++로 제작한 3D FPS 게임과 전용 서버를 개발하면서 사용한 기술과 자동화, 네트워크 구조 및 동기화 방식에 대해 정리했습니다. 클라이언트와 서버 간 통신은 Protocol Buffers를 사용하며, 데이터 정의와 코드 생성을 자동화하여 생산성과 유지 보수성을 높였습니다. 작성자 GitHub: https://github.com/ChinoDaiski ChinoDaiski - OverviewChinoDaiski has 30 repositories available. Follow their code on GitHub.github.com 프로젝트 링크서버 - https://github.com/Proejct26/FPS26Server GitHub - Proejct26/FPS26ServerContribute ..
멀티스레딩 환경에서 Unity 객체를 안전하게 다루는 방법 정리Unity에서 네트워크를 사용하다 보면, 자연스럽게 비동기 처리나 멀티스레딩을 활용하게 된다. 하지만 Unity의 엔진 구조상, 메인 스레드가 아닌 곳에서 Unity API를 호출하면 문제가 발생한다. 특히 Transform이나 GameObject와 같은 객체를 백그라운드 스레드에서 직접 조작하는 것은 매우 위험하다. 이 글에서는 Unity에서 네트워크 데이터를 송수신할 때 발생할 수 있는 스레드 문제와, 이를 해결하기 위한 잡 큐(Job Queue) 구조에 대해 설명하려한다. 1. Unity 객체는 메인 스레드에서만 접근 가능하다Unity의 대부분의 API는 메인 스레드에서만 호출 가능하다. 특히 다음과 같은 Unity 엔진 객체들은 다른..
1. Protobuf란?Protobuf (Protocol Buffers)는 Google에서 개발한 언어 중립적이며, 플랫폼 독립적인 데이터 직렬화(Serialization) 포맷쉽게 말해, 데이터를 작고 빠르고 안정적으로 저장하거나 네트워크로 주고받기 위해 사용하는 포맷이자 기술 2. Protobuf의 핵심 특징1) 바이너리 포맷- 사람이 읽을 수는 없지만, 기계에겐 훨씬 빠르고 효율적2) 엄격한 스키마 기반 - .proto 파일에서 필드 타입, 순서, 번호를 지정합니다. 이로 인해 정확하고 예측 가능한 직렬화가 가능3) 버전 호환성 - 새 필드를 추가하거나 삭제해도 기존 버전과 충돌 없이 호환이 됩니다. 필드 번호를 기반으로 구분하기 때문4) 다양한 언어 지원- C++, C#, Java, Python..

유니티에서 UI를 제작할 때 레이아웃 그룹(Layout Group)과 이미지(Image) 설정을 활용하면 더욱 효율적으로 인터페이스를 구성할 수 있다. 이번 글에서는 Vertical Layout Group, Horizontal Layout Group, Grid Layout Group을 비롯해 Image Type 설정을 이용한 게이지 아이콘 제작 방법을 소개하고자 한다. 1. Layout Group을 활용한 UI 정렬유니티에서 UI 요소를 정렬하는 대표적인 방법으로 Layout Group이 있다. Layout Group을 적용하면 자식 오브젝트들의 위치와 크기를 자동으로 정렬해 준다. [ 1.1 Vertical Layout Group (세로 정렬) ]Vertical Layout Group을 사용하면 자식 ..