일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 언리얼
- redirection crash
- deltaTime
- 13iew
- Unreal Engine 5
- ai 주춤거림
- ue4 Crash
- 리디렉션 크래쉬
- Unreal Engine Error
- 랜덤 맵 생성
- ue4 error
- Unreal Engine 4
- ai 뚝뚝 끊김
- register component
- redirector crash
- Random Map Generator
- Ai
- 리디렉터 크래쉬
- unreal engine
- unreal engine redirection crash
- ai jitter
- UnrealEngine
- UE
- splinemeshcomponent scale
- UE5
- LittleNightMare
- unity
- unreal ai lag
- UE4
- staticmesh mobility
- Today
- Total
목록전체 글 (64)
Class GameDev* SheepAdult

드로우 콜은 현재 프레임에 CPU가 무엇을 그릴지 결정하고 GPU에게 오브젝트를 그리라고 명령하는 것을 말한다. 이때 드로우 콜 발생 조건은 Mesh가 1개, 머티리얼이 1개라면 드로우 콜은 1회 발생한다. Mesh 1개에 여러 머티리얼을 사용하면 그 개수만큼 드로우 콜이 발생한다. 다시 말해, 하나의 메쉬에 여러 머티리얼이 적용되거나 하나의 오브젝트에 여러 메쉬가 붙어 있다면 그만큼 CPU의 성능에 영향을 미치고 병목 현상이 발생할 수 있다. 많은 게임에 존재하는 캐릭터 커스터마이징 기능이 이러한 문제점에 직면할 수 있다. 만약 여러 메시를 하나의 메시에 Attach하여 커스터마이징한 후, 이를 그대로 게임에 적용시킨다면, 특히 이게 많은 캐릭터가 몰리는 MMORPG라면 CPU 병목 현상이 발생할 확률..

깃허브 : https://github.com/devminjae97/GP1/tree/GP1-2_MapGeneratorTest 개요 미니맵은 아래와 같이 아이작과 비슷한 형태로 구현할 것이다. 플레이어가 방에 들어가면 minimap camera와 main camera가 방의 중앙을 가리키도록 할 것이며 현재 있는 방의 색을 밝게 하여 현재 어디에 있는지 사용자가 알 수 있도록 할 것이다. 또한, 한 번도 방문하지 않은 방은 보여주지 않고 방문했던 방만 보여줄 것이다. 미니맵 생성 미니맵을 생성하기 위해 Render Texture를 활용했다. Render Texture를 활용한 카메라 설정은 아래의 링크를 참고하여 구현했다. 영상 링크: https://www.youtube.com/watch?v=pd17u2SF..

깃허브 : https://github.com/devminjae97/GP1/tree/GP1-2_MapGeneratorTest 문 생성문은 서로 다른 방 사이에 하나만 존재한다. 문은 각 셀에서 만들지 말지 결정하는데, 만약 서로 다른 방끼리 셀 2개가 맞닿아 있다 해도 문은 하나만 생성된다. 이를 위해선 생성할 수 있는 방이 정해지면 이 방의 각 타일을 순회하며 주변 셀을 검사한다. 이미 생성된 방이어야 하며, 방 ID가 다르다면 문을 생성할 것이다.코드는 아래와 같다.// 생성할 수 있는 방foreach (Cell cell in checkRoomResult.Item2){ // 4방향 체크 for (int i = 0; i 인접 여부는 Dictionary>에 id를 저장하면서 관리한다. 키는 현..

깃허브 : https://github.com/devminjae97/GP1/tree/GP1-2_MapGeneratorTest 개요 맵 자동 생성을 구현해 보고 싶다는 생각이 들어 장르를 고민하던 중 로그라이크 게임이 눈에 들어왔고, 해당 장르는 유니티 엔진이 언리얼 엔진보다 더 어울릴 것 같아 유니티를 공부하기로 했다. 랜덤 맵 생성 방법에는 여러가지가 있는데, 그중 유명한 건 BSP알고리즘을 활용한 맵 생성이다. 방이 트리 형태로 저장되고 리프 노드가 각 방이 되며, 중간중간 통로를 놓게 되면 완성된다. 하지만 아이작처럼 통로가 아닌 문을 달아 다음 방으로 넘어가게 하고 싶었고, 모든 방이 붙어 있는 형태로 만들고 싶어 다른 방식으로 구현했다. 또한, 각 방은 1 ~ 4개의 상자 모양으로 이루어진 방으로..

인턴십을 진행하면서, 그리고 면접들을 보면서 멀티스레드 프로그래밍 경험과 채팅 서버 만들어본 경험에 대해서 질문을 받았다. 인턴십과 면접이 클라이언트가 아닌 게임 프로그래밍(클라 + 서버) 직무여서 그런지 이러한 질문을 받은 것 같다. 그래서 이참에 멀티스레드를 활용한 채팅 서버를 만들어 봤다. 깃허브: https://github.com/YangSeongIn/ChatServerWithMultiThread GitHub - YangSeongIn/ChatServerWithMultiThread: ChatServer With MultiThread ChatServer With MultiThread. Contribute to YangSeongIn/ChatServerWithMultiThread development b..

먼저 자기장 구현보다 gas를 통한 캐릭터에게 데미지를 주는 것에 대한 글을 작성하려 한다. 먼저, gas환경 하에서 플레이어에게 데미지를 주기 위해서는 데미지를 주는 액터가 UAbilitySystemComponent와 UAttributeSet을 가지고 있어야 한다. UAttributeSet은 체력 혹은 마나 등의 속성 값을 등록하여 사용하기 위한 용도이며, UAbilitySystemComponent는 AttributeSet에 변화를 주기 위한 용도로 사용할 것이다. AttributeSet먼저 AttributeSet 클래스를 하나 만든 후, Health, MaxHealth 속성을 추가했다. 그리고, 멀티플레이 환경이므로 Health를 replicated시켜 동기화할 수 있게 해 주었다.더보기#define..

유용한 오픈 소스 플러그인을 발견해서 작성한다. 틱에 작성하지 않고 틱처럼 돌아가게 하는(마치 타임라인과 비슷한) 플러그인이다. 아래는 해당 플러그인 깃 허브 링크이다. https://github.com/jdcook/fresh_cooked_tweens GitHub - jdcook/fresh_cooked_tweens: Tweens for Unreal Engine, with C++ API and Blueprint support Tweens for Unreal Engine, with C++ API and Blueprint support - GitHub - jdcook/fresh_cooked_tweens: Tweens for Unreal Engine, with C++ API and Blueprint suppor..
TSubclassOf는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스이다. 여기서 안전성이란, 사용자가 작업할 때 의도치 않은 클래스를 사용하는 것을 방지해 준다는 말이다. 이 말은 TSubClassOf는 템플릿 클래스이므로 빌드 시점에서 타입 검사가 이루어지기 때문에 런타임 에러의 위험이 없다는 점에서 안전하다는 의미이기도 하다. 보통 TSubclassOf는 EditAnywhere 등과 같이 에디터에서 직접 넣어주는 용도로 사용한다. // .h UPROPERTY(EditAnywhere) TSubclassOf TestWidgetClass; UPROPERTY() class UTestWidget* TestWidget; // .cpp TestWidget = Cast(CreateWidget(GetWor..
FORCEINLINE은 함수를 강제적으로 inline화 시킨다. inline화란 컴파일 단계에서 컴파일러가 함수 호출 지점에 함수 내용을 갖다 붙이는 것을 말한다. 왜냐하면, 간단한 함수의 경우(한 줄짜리 getter, setter 등) 함수를 호출하는 데 발생하는 오버헤드가 함수 자리에 함수 내용이 작성되어 있는 것보다 효율성이 좋지 않을 수 있기 때문이다. 다시 말해, 함수를 호출하는 지점에서 함수로 이동하는 것보다, 그 자리에 함수 내용 코드를 써넣는 것이 효율성이 더 좋을 수 있다는 얘기이다. 이러한 경우 보통 inline을 사용한다. 하지만 inline의 경우, 컴파일러가 함수 내용이 복잡하다고 판단하면 inline처리 하지 않기도 하고, inline이 명시되어 있지 않더라도 inline화 하기..
해당 에러는 FTableRowBase를 상속한 구조체를 기반으로 데이터 테이블을 만든 후, 구조체를 C++에서 해결하면 발생하는 문제이다. 항상 발생하는 것은 아니고, C++에서 구조체 수정 후, 핫리로드(편집기가 아닌 엔진 내에서 컴파일) 했을 때 발생한다. 인터넷을 곳곳이 뒤져 봤지만 한 번 발생하면 다시 되돌릴 수 없는 비가역적 에러같다... 에디터를 껐다 켜도 안되고 프로젝트 재생성해도 되지 않았다. 그래서 나도 다시 만들었다. 원래 언리얼은 핫리로드가 지양되는만큼, 엔진 종료 후 vs에서 컴파일하는 게 국룰이지만 까먹을 때도 많고, 다시 껐다 켜는 게 여간 번거로운 일이 아니다.. 하지만 이런 일이 발생하지 않도록 핫리로드를 최대한 사용하지 말도록 하자.