갬장장이
갬장장이의 코드 대장간

전체 글

게임 제작/Project TR (2024~)

Project TR 소개

Project TR (가제) Project TR은 2025년 초 출시를 목표로 한 상용 게임입니다. 세부 정보는 추후 공개할 예정입니다.

lang/.NET

SynchronizationContext

개인 기록용 포스트입니다, 잘못된 내용이 있을 수 있습니다. Akka .NET의 SynchronizedDispatcher를 공부하던 중 해당 기능이 내부적으로 SynchronizationContext를 사용하고 있다고 해서 자세히 찾아보게 되었다. using System; using System.Threading; using System.Threading.Tasks; class Program { static void Main() { // Simulating a UI context capture var synchronizationContext = SynchronizationContext.Current; // UI triggers an asynchronous operation ButtonClickHandle..

lang/.NET

Akka.NET

https://petabridge.com/blog/akkadotnet-what-is-an-actor/

게임 제작/Rovenhell (2023)

[Rovenhell] 기술 분석

프로젝트 소개글은 여기서 확인하실 수 있습니다. 본 포스트에서는 로벤헬 프로젝트를 진행하며 제가 기술적으로 고민하고, 해결했던 흔적을 남겨두려고 합니다. 개발 과정에서 어떤 어려움이 있었고, 그 어려움을 기술적으로 어떻게 극복하려 시도했는지에 대한 분석이 담겨 있습니다. 아키텍처 설계의 배경 로벤헬은 "Server authoritative한 충돌, 이동 연산을 지원하면서도, 한 장소에 몇 천 명이 동시에 위치할 수 있는 MMO"라는, 엄청나게 거창한 목표를 두고 개발되었습니다. 사실 맨 처음에는 서버는 그냥 중개자 역할만 하고, 클라이언트가 위치를 발송하면 서버가 그걸 다른 클라이언트에게 전달하는 정도를 목표로 잡았지만, 막상 개발을 시작하니 뭔가 욕심이 나기 시작했고, "왜 물리 연산이 FPS만큼 리얼..

lang/erlang, elixir

BEAM concurrency model

SEP 29, 2019 • JAVIER GARCÍA The first question that arises when we talk about concurrency is what is concurrency? When talking about concurrency, it’s important not to confuse concurrency with parallelism. While concurrency implies that two pieces of code are executed in different contexts, it doesn’t necessarily imply that they are executed at the same time. Parallelism does. If two fragments ..

life

개발자 선배님들과의 인터뷰

오늘 제가 속해있는 게임 제작 동아리 출신 게임 개발자 선배님들과 이야기를 나눌 수 있는 좋은 기회가 있었습니다. 여기서는 정식 인터뷰와 별개로 제가 개인적으로 대화를 나눴던 내용들 중 기억에 남는 내용들을 남겨 놓으려 합니다. 1. 현업에서 게임 개발 과정의 흐름 : 제가 알고 있는 내용과 크게 다르진 않았지만, 사운드 추가 작업이 생각보다 개발의 상당히 뒷쪽 시점에서 이루어진다는 것에 놀랐습니다. 개인적으로 혼자 게임을 개발할 때는 플레이어 몰입감에 소리가 중요한 역할을 한다고 생각해서 이걸 고려하며 개발하기 위해 개발 중반 정도에 사운드 작업을 같이 하는데, 회사는 마감일을 지키는 게 아주 중요하다 보니 크리티컬한 기능을 먼저 개발하는 게 중요하고, 또 사운드를 전담해서 제작하는 팀이 따로 있기 때..

game engines/Unreal Engine

Custom Movement Component

https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/CPPTutorials/Components/3/ SafeMoveUpdatedComponent는 언리얼 엔진 피직스를 사용하여 입체 장애물을 피해 Pawn Movement Component 를 이동시킨다. SlideAlongSurface 는 이동하다가 충돌이 발생할 경우 미끄러짐 벡터를 계산해 시 표면을 타고 부드럽게 미끄러지도록 하는 물리 연산을 한다.

networking

Game Traffic Analysis: An MMORPG Perspective Kuan-Ta Chen, Polly Huang, Chin-Lau

Game Traffic Analysis: An MMORPG Perspective Kuan-Ta Chen, Polly Huang, and Chin-Laung Lei PDF Version | Contact Us Abstract Online gaming is one of the most profitable businesses on the Internet. Of all the genres of online games, MMORPGs (Massive Multiplayer Online Role Playing Games) have become the most popular among network gamers, and now attract millions of users who play in an evolving v..

게임 제작/Rovenhell (2023)

Rovenhell(로벤헬) 소개

Rovenhell (로벤헬) 개발 기간: 23년 8월 ~ 11월 개발 목적: 취미 겸 기술 역량 향상 개발 환경: 클라이언트 및 게임 로직 서버: 언리얼 엔진 5 (커스텀 넷코드 제작, 언리얼 Replication 사용 X) 미들웨어: Visual C++, IOCP 개발 언어: C++ 기술 분석: https://gamesmith.tistory.com/272 [Rovenhell] 기술 분석 프로젝트 소개글은 여기서 확인하실 수 있습니다. 본 포스트에서는 로벤헬 프로젝트를 진행하며 제가 기술적으로 고민하고, 해결했던 흔적을 남겨두려고 합니다. 개발 과정에서 어떤 어려움이 gamesmith.tistory.com 소스 코드: https://github.com/hagukin/Rovenhell_UE GitHub -..

game engines/Unreal Engine

[UE5] 블루프린트에서 RootComponent가 제대로 설정되지 않을 때

https://forums.unrealengine.com/t/setting-root-component-to-primitive-component-doesnt-work/507801 Setting root component to primitive component doesn't work? If I have a C++ actor like: UCLASS() class MYMOD_API AMyActor : public AActor { GENERATED_BODY() public: AMyActor(); public: UPROPERTY(VisibleAnywhere, Category = "Components") USceneComponent* SceneRootComponent = nullptr; }; AMyActor::AM..

lang/c++

가상 소멸자

1) Animal 클래스와 Cat 클래스가 존재한다. Cat 클래스를 Animal 클래스 포인터로 가리킨 상태에서 (Upcasting) 그대로 삭제하게 되면 ~Animal만 호출되고 ~Cat은 호출되지 않아 Cat의 내용물이 모두 해제되지 않는 메모리 릭이 발생할 수 있다. 2) 이를 해결하기 위해서는 Animal 클래스의 소멸자를 virtual로 선언해주면 된다. 3) 하지만 모든 클래스의 소멸자에 무조건 virtual을 붙여주는 것은 좋지 않다. 이유는 virtual을 붙이는 순간 해당 객체는 vtable을 가리키는 vptr을 내부적으로 가지게 되고, 이는 즉 다시 말해 객체의 크기가 커지는 것을 의미한다. 해당 객체의 개수와 빌드 아키텍처에 따라 고작 virtual 하나를 붙였을 뿐인데 불필요한 메..

lang/c++

템플릿 사용 시 LNK1120 "확인할 수 없는 외부 참조" 발생

분명 필요한 헤더 파일을 전부 include 했지만 계속 해당 오류가 발생하는 경우가 있다. 원인: 템플릿을 .h와 .cpp로 분리해서 작성할 경우 발생하는 에러이다. 해결 방법: 1) 템플릿을 애초에 .cpp로 분리하지 않고 .h에 구현부까지 작성한다 2) 혹은 cpp 구현부 하단부에 가능한 템플릿 목록을 미리 선언해 놓는다 3) 혹은 .cpp를 같이 include 한다 참고: https://ansohxxn.github.io/cpp/chapter13-2/