게임 개발을 하다보니, 플레이어의 위치, 타이밍, 걸리는 시간 등 정확한 계산을 요하는 일이 많이 생긴다. 특히나 플레이어간의 동기화를 고려하면, 사소한 오차로 클라이언트간의 소통오류로 이어질수가 있다. 그래서 float type을 사용할 때, 조금 더 주의를 해줘야한다. 바로 부동 소수점 오차, 즉, 플로팅 연산 오류가 생길수 있기 때문이다. 간단하게 개념만 이해한다면, float으로 계산을 하다보면, 가끔씩 소수점 하위 부분에서 각 하드웨어(cpu)의 연산 방식, 성능 등에 따라서, 오류가 생기기도 하는 데, 예를 들어, (float type) * (float type) 의 결과 값이 10f가 나와야 한다면, 9.999999999f가 나온다는 것이다. 왜 이런 일이 벌어지는 것일까? 모든 십진수들이 ..
한달간의 감상평 : 이직 이후 첫 한달. 첫직장에서 첫 한달을 보내는 것 처럼 어색하고, 많이 헤맨 기간이다. 그래도 점점 적응이 되어가는 중이고, 어렵기만 하던 코드도 조금씩 눈에 보이기 시작하고 있다. 아직 다 못본 코드도 많고 수습이 끝나고 살아남을지 의문이지만, 현재 내가 할수 있는 만큼 하고 있다고 생각한다. TIL - 6개 밖에 못썼다..ㅠㅠ 젠킨스 기능 개발용도 ci개발 비록 기존에 만들어진 형식에서 간단하게 만든 거지만, 기능별 빌드 환경을 구축했고, 생산성이 많이 증가했다. Git 브랜치 전략 도입 Main 하나로 돌던 브랜치에 release/dev/feature 로 나눠줬다. Main에서 개발하다가 문제가 생길수 있음을 방지 게임 서버 프로그래밍 이해 서버와 클라이언트의 동기화를 위해 ..
c++ 아두이노 언어를 c#으로 변환해주는 인터프리터 이 인터프리터를 가지고 c++를 c#으로 전환해주고, 유니티에서 가상 시뮬레이션을 돌려준다. 먼저, runcode 함수를 실행 → 이때 lexer와 parser를 생성해주는 데 lexer에 전체 코드를 넣어준다. lexer와 parser의 역할은 뒷 내용을 보다보면 이해가 가겠지만, lexer는 코드의 string byte를 token으로 인식하게 해주고, parser는 이 token으로 해석을 시작한다. 이과정에서 AST(추상구문트리)의 노드 구조를 형성하고, 이후에 evaluater에서 이러한 트리구조를 실행해준다. private static async UniTask RunCode(string code) { var lexer = new Lexer(..
GameCI를 사용한 apk 빌드 자동화 1) 라이센스 activation unity pro license인 경우 먼저, 유니티의 serial key를 받아야 한다. → XX-XXXX-XXXX-XXXX-XXXX-XXXX 와 같은 형식 repository의 settings에 secrets로 들어간다. 다음 그림 처럼 secrets를 생성해준다. 이름은 UNITY_SERIAL/UNITY_EMAIL/UNITY_PASSWORD 로 지어준다. 각각의 secret에는 각 이름에 맞는 값을 넣어준다. UNITY_SERIAL → 아까받은 serial 값 UNITY_EMAIL → unity 이메일 UNITY_PASSWORD → unity 패스워드 2. unity personal license인 경우 pro와 케이스가 거..
개요 빌드, 배포등의 자동화 → 왜 자동화 해야하는 가? 빌드를 하는 과정은 시간도 오래 걸리고 자주, 반복적으로 해줘야 하기 때문에 수동으로 해주면 많은 시간을 잡아 먹게 된다. (빌드란, 실행 애플리케이션을 추출하는 과정이다.) 이렇게 반복되는 과정은 버튼 하나 or 단축키로 자동화 할 필요가 있다. DevOps에서 필수적인 업무중 하나인 CI/CD 파이프라인 구축은 현재 사용법이 매우 용이 해진 상황이다. 일반 개발자들도 충분히 구현 할수 있다. 어떻게 구현을 하는 가 먼저, 어떤 도구를 사용해야할지 정해야 한다. 후보군 : Jenkins, Unity Cloud Build, Github Actions 장단점 비교 jenkins : 무료, 전용 mac 또는 pc 필요, 사전 지식 필요하다, 확장성 높..
개발을 하다 보면 Debugging을 자주 사용하게 된다. 하지만, Debugging 자체가 성능을 많이 잡아 먹는 다고 하니, 개발이 끝난 이후에는 일일이 삭제를 하는 편이다. 또한, 빌드를 했을 때도 Debugging은 그대로 작동을 하게 된다. Android 빌드를 하고 Logcat을 찍어보면 Debug 클래스가 그대로 작동하는 것을 확인 할수 있다. 빌드에 포함 시키지 않고, 에디터에서만 돌아가게 하는 방법은 [System.Diagnostics.Conditional("UNITY_DEDITOR")] 을 사용하면 된다. 에디터 일때만 Debug.logger.logEnabled = false 을 사용하는 방법은 클래스 호출은 그대로 이기 때문에 비효율적이다. 하지만, 먼제 제시한 방법은 빌드 했을 때,..
각 절기 마다 발표자를 선정해 공부한 내용을 발표하는 발표 모임이 있다. 이번 하지(6월 21일)에 발표 기회를 얻어 발표를 하게 되었는데, 발표 주제는 게임 엔진의 역사와 동작 원리이다. 현재 유니티 개발을 하면서, 게임 엔진에 대한 호기심이 생기기 시작했다. 또한, 이전 이직 준비를 하며서, 피드백을 들은 내용 중 게임 로직 개발을 당연히 해야 하는 것이다. 그렇기에, 자신의 강점을 가지고 가야 한다. 네트워크, 쉐이더, 서버 등 각분야 중 자신의 강점을 가지고 가야 경쟁력을 키울 수 있다 이런 피드백을 듣고 나니, 게임 분야에 어떤 분야들이 있고, 그에 대해 깊이 파보지 않았던 것 같다. 단순한 인디 게임 개발이라면, 현재 나와있는 통합 게임 개발 솔루션을 통해 간단한 게임은 개발 할수가 있다. 게..
Nuget package란? nuget 패키지란, .NET framework을 위한 패키지 매니저이다. 다음과 같은 이점을 가지고 있는데, 추가 기능 접근: NuGet 패키지는 유틸리티, 프레임워크, API 등을 포함한 다양한 미리 작성된 코드와 라이브러리를 제공한다. 이러한 패키지는 개발 시간과 노력을 절약할 수 있는 기능과 도구를 제공하여 Unity 프로젝트를 강화할 수 있다. 코드 재사용성: NuGet 패키지는 이미 다른 개발자들에 의해 개발되고 테스트된 코드와 구성 요소를 재사용할 수 있도록 한다. 이를 통해 개발 속도를 높이고 프로젝트의 품질을 향상시킬 수 있으며, 패키지가 제공하는 전문 지식과 기능을 활용할 수 있다. 타사 통합: 많은 NuGet 패키지는 타사 서비스, 플랫폼 및 API와의 통..