본문 바로가기

분류 전체보기

(59)
[POE 3.17] 40챌 찍고 나서 쓰는 후기 Path of exile의 3.17 강적 시즌이 (나에게는) 막을 내렸다. 찍먹이라지만 3.7 군단 시즌부터 해왔으니 11시즌을 한 것인데, 이번에 처음으로 40챌린지를 완료하고 시즌 아웃할 수 있게 되었다! 이번 시즌 40 챌린지가 꽤나 쉬워서 38챌까지만 할까하다가 결국 '이번 시즌 아니면 언제 또 해보겠어'하는 마음으로 하게 되었다. 40 챌린지가 끝난 기념으로 주저리 주저리 정리를 좀 해볼까 한다. 아틀라스 개편 이번 시즌은 확장팩 시즌이었기 때문에 기존 틀에 큰 변화가 있었는데, 가장 큰 것은 2개 세력의 신규 보스와 아틀라스 패시브 개편이 아닐까 싶다. 추가된 신규 보스는 '작열의 총주교'와 '끝없는 허기'인데, 메이븐과 같은 방식으로 맵 디바이스에서 매핑을 돌때 마주칠 세력을 결정할 수 있다..
자체 게임 엔진 개발하기 (HopStep Engine) - Reflection과 Property 자체 엔진 만들기를 시작하면서 가장 먼저 목표로 삼았던 것은 리플렉션 시스템의 구현이다. 리플렉션이라는 개념은 C#을 사용하면서 어느 정도는 알고 있다고 생각했지만, 직접 구현을 하는 것은 그보다 더 깊은 이해도를 줄 것이라고 생각했다. 또 이 리플렉션 시스템이야 말로 UE4의 코어 시스템 중 하나라고 생각하기도 했고. 리플렉션(Reflection)이라는 것은 거울에 비친 자기 자신을 보듯이, 시스템의 어떤 타입이 자기 자신이 어떻게 생겼는지를 알 수 있는 시스템이라고 설명할 수 있을 것 같다. 어떤 타입이 어떤 프로퍼티와 어떤 메서드를 가지고 있는지를 확인하고, 한 발 더 나아가서 동적으로 이를 런타임에 수정할 수 있는 시스템 구축이 나의 목표이다. C#에서는 어떤 타입의 리플렉션 정보는 해당 타입이 ..
자체 게임 엔진 개발하기 (HopStep Engine) 게임 클라이언트 프로그래머로서, 자체 게임 엔진을 개발하는 것은 언제나 상상하던 일이 아닐까 싶다. 특히 언리얼 엔진을 사용하다보면 코드의 내부까지 모두 확인이 가능하다보니 "나도 해볼 수 있지 않을까?"하는 생각이 들게 된다. 물론 만들다보면 그리 긴 시간이 지나지 않아 그 생각이 틀렸다는 것은 알게 된다. 마침 POE 시즌도 끝냈고, 회사 내부의 세미나도 준비해두어야 할 것 같아서 쉬는 시간에 짬짬이 자체 게임 엔진을 개발중이다. 이름은 작은 규모의 개발을 경쾌하게 하자! 라는 의미로 HopStep 엔진이라고 지었다. https://github.com/highfence/HopStep GitHub - highfence/HopStep Contribute to highfence/HopStep develop..
Unreal의 스레드와 단일 스레드로 실행시키기 (-norenderthread) 언리얼은 두 개의 메인 스레드로 돌고 있는데, 하나는 우리가 아는 게임 스레드이고 나머지 하나는 한 틱 뒤에서 이 게임스레드를 뒤쫓고 있는 렌더 스레드이다. 게임 스레드가 월드의 변경점을 렌더 스레드에 반영시키기 위해서는 ENQUEUE_RENDER_THREAD라는 매크로를 통해 람다 함수로 이를 렌더 큐에 쌓아두는 방식으로 접근한다. void BeginInitResource(FRenderResource* Resource) { ENQUEUE_RENDER_COMMAND(InitCommand)( [Resource](FRHICommandListImmediate& RHICmdList) { Resource->InitResource(); }); } RenderResource.cpp에 정의되어있는 BeginInitRe..
UE4 -waitforattach int32 GuardedMain(const TCHAR* CmdLine) { #if !(UE_BULID_SHIPPING) if (FParse::Param(CmdLine, TEXT("waitforattach")) { while (!FPlatformMisc::IsDebuggerPresent()); UE_DEBUG_BREAK(); } #endif ... } 언리얼을 실행시킬 경우, 실행인자로 -waitforattach라는 파라미터를 넣어줄 수 있다. 파라미터 이름에서 쉽게 유추 가능한 기능인데, 해당 파라미터를 넣으면 언리얼은 엔진 실행을 wait하며 디버거가 붙기를 기다려 준다. 디버거가 붙었다면, UE_DEBUG_BREAK를 이용하여 디버거에 신호를 준다. 쿠킹 로직을 따라가보고 싶은 경우에 사용하면 상당히..
11.30 friends function Friend Functions in C++ | Use of Friend Function in C++ with Examples (mygreatlearning.com) Friend Functions in C++ | Use of Friend Function in C++ with Examples Friend Functions in C++: A friend function in C++ is defined as a function that can access private, protected, and public members of a class. www.mygreatlearning.com 언리얼의 FArchive 쪽을 보다가 friend 키워드가 function에 붙는 것을 보았다. 훑어보니 friend clas..
JetBrains의 새로운 IDE : Fleet JetBrains Fleet: 차세대 JetBrains IDE JetBrains Fleet: 차세대 JetBrains IDE www.jetbrains.com JetBrains에서 가벼운 에디터를 목표로 새로운 IDE를 출시했다. VS Code와 같은 포지션이라고 생각할 수 있을 것 같다. 리모트 실행이나 실시간 피어 프로그래밍 지원 같은 피쳐에 힘을 싣고 있는 것 같다. 현재는 오픈되어있지 않고, 테스트 참여 지원만 가능한 상황이다.
[Python] Slack sdk를 이용해서 Slack 메시지 보내기 from typing import Optional from slack_sdk import WebClient from slack_sdk.errors import SlackApiError class SlackNotifier: __latest_thread_identifier: float = None def __init__(self, token): try: self.__client = WebClient(token) except Exception as e: print(f"Slack notifier got an error : {e}") def notify(self, header_blocks: [str], show_msg: str, channel: str) -> bool: if not self.__client: re..