본문 바로가기

반응형

분류 전체보기

(425)
무료 게임 리소스 사이트 프로그래머로써 혼자 게임을 만들다 보면 이미지, 이펙트, 사운드등의 프로그래밍 외적 리소스의 한계를 자주 느끼게 된다. 그렇다고 매번 유료 리소스를 사는 것도 부담되고, 심지어는 내 마음에 꼭 드는 유료 리소스는 찾기도 힘들다. 본 포스트에서는 필자가 개인적으로 게임을 만들면서 리소스를 얻었던 사이트들을 공유하도록 하겠다. 혹시 링크가 끊어져 있거나 더 좋은 사이트를 알고 계신다면 댓글로 남겨주시면 고맙겠다. 2D 그래픽 'Free Game Assets' - https://www.gameart2d.com/freebies.html 2D 캐릭터 스프라이트 시트와 타일 맵, GUI 리소스를 구할 수 있음 free라고하지만 눈길 갈만큼 퀄리티가 있는것은 10~20달러 선에서 유료 판매 되고 있음 '게임 마당' ..
[C++20] 모듈(module) 모듈(module) 이란? C++20 이전의 C++에서는 필요한 함수 또는 클래스를 불러오기 위해 #include 전처리문을 이용해 왔다. 이런 헤더 파일 방식의 문제는..많지만 그 중에 필자가 가장 크리티컬하게 생각하는 부분은 #include 전처리문을 가리키고 있던 파일의 내용 그대로 치환해버려 헤더에 있는 필요하든 필요하지 않든 상관 없이 정의 되어있는 모든 기능을 포함하게 된다는 것이다. 예를 들어 cmath 헤더 파일에서 정작 내가 필요한 기능은 acos함수 하나 뿐이지만, acos를 사용하기 위해서 나는 헤더에 정의된 모든 함수들을 인클루드하고 컴파일 해야만 한다. 이미 현재 다른 언어들에서는 필요한 기능만을 가져 올 수 있는 기능을 제공하고 있지만 C++은 이번 C++20 스펙의 module..
좋은 주석을 위한 9가지 규칙 들어가며 소스 코드가 컴파일러나 인터프리터가 이해하고 실행하기 위해 작성되는 것이라면, 소스 코드 사이 사이의 주석은 사람이 읽고 코드를 이해 할 수 있도록 돕기 위해 작성된다. 세상에는 컴파일러를 위한 좋은 코드를 작성하는데 도움이 되는 많은 책들과 글, 심지어는 분석 도구들이 많이 나와 있지만 아쉽게도 사람에게 필요한 좋은 주석을 작성하기 위한 가이드라인은 상대적으로 적다. 먼저 소스 코드의 '주석(comment)'라는 주제에 대해 가장 인기 있는 글 중의 하나인 Visual Studio Magazine의 No Comment: Why Commenting Code Is Still a Bad Idea 를 살펴 보면, 주석에 대해 다음과 같이 이야기하고 있다. 주석을 작성하고 유지하는 것은 적지 않은 비용..
[Unity] Physics.Simulate를 이용한 네트워크 동기화 들어가며 네트워크 게임에서 서버와 클라이언트간의 네트워크 전송 지연(transmission delay)은 이 세상에 물리 법칙이 적용되는한 피할 수 없는 사실이다. 플레이어가 액션을 취한 뒤 서버의 시뮬레이션을 거쳐 다른 플레이어들에게 전파되기 까지는 항상 지연이 수반 된다. 위 그림에서 클라이언트 A에서 전송한 패킷이 서버에서 처리를 거쳐 클라이언트 B에게 전달 되기 까지 100ms가 필요했다. 따라서 클라이언트 B에서 볼 수 있는 클라이언트 A의 최근 모습은 아무리 빨라도 100ms 이전의 모습 밖에는 볼 수 없다. 다시 한번 말하지만 네트워크 지연은 절대 피할 수 없는 물리적 한계이고, 길다면 길고 짧다면 짦은 온라인 게임의 역사속에 이 문제를 해결하기 위한 많은 방법들이 제시되었다. 이번 포스트에..
[Linux] 데몬(Daemon) 프로세스 만들기 데몬(daemon)이란? '데몬(daemon)' 프로세스는 리눅스 운영 체제서 사용하는 프로세스의 일종으로써, 시스템 시작이 시작할 때 그 생명을 시작하여, 우리가 알지 못하는 백그라운드에서 자신의 할 일을 묵묵히 행하다 시스템과 함께 그 생명을 다한다(대충 컴퓨터 켜면 자동으로 실행해서 끌 때까지 종료되지 않는다는 뜻). 이 페이지에서는 데몬의 특징을 살펴 보고 간단한 데몬 프로세스를 만들어 보도록 하겠다. 참고로 윈도우에서는 '서비스'라는 데몬 프로세스와 비슷한 역할을 하는 것이 있다. 윈도우 '서비스'에 대한 설명은 본 포스트 맨 아래 부록으로 추가 되어있다. 데몬(daemon) 프로세스의 특징 일반적으로 Daemon을 단순히 시스템 백그라운드에서 돌아가고 있는 프로세스라 생각하기 쉽다. 아래의 화..
[C#] C# 구조체(struct)로 메모리 절약하기 들어가며 C++에 익숙한 사용자라면 class와 struct의 차이라고 해봐야 멤버에 대한 기본 접근한정이 private이냐 public이냐 정도차이 라고 알고 있을 것이다. 하지만 C#에서는 class와 struct의 차이가 매우 크다. 이 포스트에서는 C#에서 struct와 class에 대한 차이를 설명하고 struct를 이용해 많은 메모리를 절약한 시나리오에 대해 알아 보도록 하겠다. 메모리의 타입(유형) 코드에서 객체를 생성할 때 마다 객체는 어느 정도의 메모리를 필요하게 된다. 객체에 대한 메모리는 사용 중이 아닌 영역에 할 당되어야 하며, 이 할당 되어야 하는 메모리는 크게 '스택'과 '힙'이라는 두 가지 종류가 있다. 본론에 들어가기 앞서 이 두가지 유형의 메모리에 대해 간단히 살펴 보도록 ..
[C#] 두 시간의 차이 구하기 - TimeSpan C#에서는 현재 시간을 나타내기 위해 DateTime이라는 자료구조를 제공한다. 이번 포스트에서는 두 DateTime 간의 시간의 차이를 구하는 TimeSpan의 사용 방법에 대해 알아 보도록 하겠다. using System; using System.Threading; DateTime start = DateTime.Now; // 현재 시각 구하기 Thread.Sleep(5000); // 5초 정도 슬립 TimeSpan span = DateTime.Now - start; Console.WriteLine(span); Console.WriteLine(span.TotalSecone); // 초 단위 시간차 구하기 Console.WriteLine(span.TotalMilliSecone); // 밀리 초 단위 시간..
[Unity] 지금 동작하는 스레드가 메인 스레드인지 확인하는 방법 유니티로 싱글 스레드 기반 서버를 만들고 있는 중이다. 싱글 스레드 기반이라고 하더라도 성능을 위해서는 멀티 스레드를 완전히 배제하고 만들 수는 없다. 네트워크 IO라던지, 비동기 작업을 할 때는 멀티 스레드에서 작업을 하다가 완료가 되면 다시 메인 스레드에서 재개하는 방식으로 만들어야 한다. 하지만 어떨 때는 현재 구동되고 있는 코드가 메인 스레드에서 돌아가고 있는 것인지 다른 백그라운드 스레드에서 돌아가고 있는 것인지 확인해야 할 필요가 있다. 여기서 현재 실행 중인 스레드를 나타내는 Thread.CurrentThread 속성을 이용하여 현재 코드가 구동되고 있는 스레드가 메인 스레드인지 체크하는 예제 코드를 소개 하도록하겠다. 방식은 간단하다. Start 메소드와 같이 메인 스레드에서 구동되는 곳에..
[C#] Generic Constraints 들어가며 클래스에 제네릭을 적용할 때 제네릭 인자를 특정 클래스를 상속 받은 것만 사용 할 수 있도록 하고 싶은데 어떻게 해야 할지 몰라 찾아 보니 [여기]에 설명이 되어 있길래 번역해본다. C#은 제네릭 타입을 사용 할 때 제약 사항을 줄 수 있다. 이 제약 사항들을 이용하여 제네릭 타입의 인스턴스를 생성하는 코드를 컴파일 타임에 에러를 찾아 낼 수 있다. where 키워드를 이용해 제네릭 타입에 대해 하나 또는 이상의 제약사항을 설정 할 수 있다. GenericTypeName where T : constraint1, constraint2 아래 예제는 보여준다. 제약 사항과 함께하는 제네릭 클래스에 제약사항을 class DataStore where T : class { public T Data { ge..
[Ubuntu] 설치 된 패키지 버전 정보 내 환경에 설치된 패키지들의 버전 정보를 알아야 할 필요 있다.. install aptitude 먼저 설치된 패키지들의 정보를 확인하기 위해서는 "aptitude"가 설치 되어 있어야 한다. aptitude 커맨드를 실행 했는데 없는 명령어라고 에러가 발생한다면 aptitude 설치를 먼저 하도록 하자. $ sudo apt install aptitude 위는 ubuntu-20.x.x 버전에서 실행한 명령어다. 만일 이전 버전이라면 apt-get 명령어를 사용하면 된다. aptitude show 필자의 경우 libmysqlclient-dev의 버전을 알아야 할 필요가 있었다. 아래는 libmysqlclient-dev의 버전을 확인하기 위한 명령어다. $ aptitude show libmysqlclient-..

반응형