어느덧 한달에 한번 회고 모임을 한지도 1년이 되었다. 2022년 회고를 하며 내가 무엇을 했는지 가물가물 했던 것에 나의 부족한 기억력에 신선한 충격을 받으며 시작한 모임이 어느새 1년동안 했다는게 놀라울 따름이다. 그동안 적었던 회고록들을 보며, 많은 감상이 들었다. 2022년 당시 가지고 있던 불안감들, 개발자로서 커리어를 쌓기 이전의 고민들을 보며, 지금과는 전혀 다른 고민을 하고 있었던 1년전의 나를 발견할수 있었다. 이러한 생각에 지금 내가 개발자로서 가지고 있는 고민들이 결국 지나 가는구나 라고 다시금 느끼게 된다. 물론 내가 현재 더 훌륭한 개발자가 되기 위한 고밀들을 가볍게 볼일이란 것이 아닌 것임을 안다. 단지, 괜한 걱정에 현재의 문제를 부풀려 생각하지 않을 수 있도록 다시 마음먹게 ..
ecs란? Unity ecs의 ecs는 entity component system으로, 기존의 component system과 다른 구조를 가지고 있다. ecs는 Dots, data oriented technology stack를 기반으로 설계된 시스템이다. 간단하게 축약하자면, 기존의 방식은 그대로 유지하되, 게임오브젝트로 작업을 하던것이entity로 수행을 하게 되는 것이다 기존 component system 기존의 component system은 우리가 생성한 gameobject에 component를 붙여서 object를 완성해 나간다. 이러한 component들은 개별로 메모리에 저장이 된다. 이때, component 저장이 되는 메모리는 랜덤한 위치에 저장이 되게 된다. 이 구조로는 많은 캐시 ..
한달 감상평 : 회사일이 정말 바쁜 한달이었다. 지스타, 정부과제 시연 등으로 회사일정이 빠듯했다. 이 바쁜일을 소화 하면서, 뭘 배웠는지 시간을 조금 더 들여서 정리하도록 해야겠다. 전체적으로, 좋은 경험을 한 한달이었다. Programming Work 지스타 처음 경험 해본 게임 컨벤션이다. 다양한 사람을 보고, 새로운 경험을 해보니 시야가 넓어 지는 듯 했다. 내년에도 꼭 참가를 해보고 싶다. 어떤 게임을 사람들이 좋아하는 지, 어디서 재미를 잃는 지 등 앞으로 게임을 개발할 때, 참고할 점을 배웠다. 버그 다양한 버그를 다뤘지만, 그 중 대표적으로 기억에 남는 버그 몇가지를 적어 보았다. 크래시 앱이 크래시가 났을 때, 덤프 파일을 비주얼 스튜디오로 디버깅 할 수 있는 방법을 배웠다. 주의할 점은..
memory leak은 성능 저하의 원인중 하나이고, 최적화를 위해 잡아야 하는 문제들중 하나이다. unity 내부에서 memoty leak을 유발 할 수 있는 이슈중 하나로, 잔류 unity instance가 있다. 이 경우 어디서 어떤 오브젝트가 누수가 되고 있는 지 확인하기가 어렵다. 이현상에 대해서 잠깐 짚고 넘어가보자. 실제로 Unity Engine은 C#의 Managed shell과 C++로 이루어진 Native 엔진 코드로 이루어져 있다. C#에 할당된 오브젝트를 Wrapper object, C++에 할당된 오브젝트를 Native Object라고 부르겠다. 잠깐 설명하고 넘어가자면, 실질적인 오브젝트는 Native Object로 실직적인 process는 여기에 존재한다. Wrapper obe..
제목에서 알수 있듯이, 비동기 프로그래밍을 짤 때, async void는 지양하는 것이 좋다. 그이유로는 에러 처리에 있어서 예상치 못한 문제를 야기 할수가 있어서 그렇다. 그렇다면, 이것이 대체 어떻게 우리 프로그램에 영향을 끼치는 것일까. 결론부터 보자면, async void의 execution이 에러를 일으키면 application은 crash된다. 예를 들어보겟다. BackGroundTask task = new(); Debug.Log("hello"); await task.RunTask(); Debug.Log("world"); public class BackGroundTask : Monobehaviour{ public async Task RunTask(){ await Task.Delay(1000);..
한달 감상평 : 어떻게 지나갔는 지 모르겠는 한달이었다. 부산 지스타를 위해서 '아케이드 파티' 0.9.0 패치를 준비하고 있는데, 생각보다 작업량이 많아서 바쁘게 한달을 보냈다. 골머리 아픈 문제들을 해결하면서 경험과 실력이 느는게 느껴지고 있다. 하지만, 얼른 이 작업을 마무리하고, 다른 일을 하고 싶은 마음이 들기도 한다. 항상 회고마다 언급하지만, 다른 개발자분들이 짠 코드를 보면서 감탄도 하고, 기억해 뒀다가 나중에 써먹어야지 하는 생각도 든다. 그래서 프로그래밍이 재밌는 것 같다. 하나의 작품을 써내려 가며 본인 자신의 기예를 선보이는 장소라는 생각도 어렴풋이 든다. Programming Work 이모티콘 기능 요약 : 플레이어들끼리 이모티콘으로 의사소통을 할 수 있는 소통 시스템을 도입한다...
틀린 데이터 동기화 메커니즘을 선택하면 버그가 발생할 수 있으며, 대역폭을 많이 사용하고 코드를 더 복잡하게 만들 수 있다. Netcode for GameObjects (Netcode)은 플레이어 간의 정보 동기화를 위한 두 가지 주요 방법을 제공한다. RPC (원격 프로시저 호출)와 복제 상태 (NetworkVariable) 두 가지 방법 모두 네트워크를 통해 메시지를 전송하는 데, 어떻게 메시지를 전송할지에 대한 논리와 설계는 둘 중 하나를 선택해야 한다. NetworkVariables vs RPC RPC는 순간적인 이벤트, 수신될 때에만 유용한 정보에 사용 NetworkVariables은 영구적인 상태, 순간 이상 유지되는 정보에 사용 사용할 방법을 빠르게 선택하는 방법은 자신에게 다음과 같다 : ..
한달간의 감상평 : 현재 직장에 조금씩 더 익숙해지고 있다. 일을 하나씩 쳐낼때마다 다음에는 더 잘해야지 하는 생각도 들고, 선임분들이 짠 코드를 보며 많이 배우고 있다. 남는시간에 자기계발에 쏟는 시간이 조금 줄었다. 줄어든 만큼 쉬기도 하고 잘놀았다. programming 새로운 미니게임 개발 2 - feat. 메탈기어 솔리드 (완료) 설명 산출하는 물리 혹은 미세한 타이밍등 각 클라이언트 별 계산값이 달라질수 있는 경우는 서버에 연산을 맡기도록 설계했다. 클라이언트 몬스터 움직임을 개선하기위해서 시간 별로 있어야하는 위치를 보간해주었다. 느낀점 애니메이션, 이팩트 등을 입힐때 다양한 상황을 고려해서 만들어 두고, 밸런싱에 필요한 수치를 미리 밖으로 빼놓는 것을 항상 고려하자 아쉬운점 몬스터의 패턴에..