일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- unreal ai lag
- redirector crash
- staticmesh mobility
- redirection crash
- ue4 Crash
- ue4 error
- 리디렉션 크래쉬
- 랜덤 맵 생성
- 언리얼
- unreal engine redirection crash
- UE4
- register component
- UnrealEngine
- UE5
- Unreal Engine Error
- deltaTime
- unity
- ai jitter
- Ai
- Random Map Generator
- splinemeshcomponent scale
- unreal engine
- LittleNightMare
- 13iew
- Unreal Engine 5
- UE
- ai 뚝뚝 끊김
- Unreal Engine 4
- ai 주춤거림
- 리디렉터 크래쉬
- Today
- Total
목록전체 글 (64)
Class GameDev* SheepAdult
개인 프로젝트를 진행 중에 Dangling Delegate 문제로 인해 많은 시간을 소비했다. 인벤토리 구현 중, 인벤토리 위젯 내의 다른 위젯 클래스의 함수가 캐릭터 컴포넌트에 선언된 업데이트 관련 delegate에 바인딩 되어 있었다. 인벤토리를 온오프하면 인벤토리 위젯은 당연히 삭제 되므로, delegate에 바인딩 된 함수도 같이 해제해 줘야 하지만, 이를 처리하지 못한 문제였다. 문제는 이상하게도 해당 함수가 바인딩 된 것 처럼 실행은 된다는 것...(인벤 토리의 구조체들은 업데이트가 되지만 widget은 업데이트 되지 않았다.) 이전엔 코드가 아래와 같았다. /* 인벤토리 슬롯들을 나열하는 그리드 클래스 */ // InventoryGrid.cpp void UInventoryGrid::Updat..
언리얼에서의 딜리게이트는 사용하면서부터 쭉 옵저버 패턴이라고 생각해왔고 확인 결과 옵저버 패턴이 맞았다. 그런데 ReplicatedUsing 또한 특정 행위가 발생하면 특정 함수가 호출이 되는 것이고, 그로 인해 액터에 대한 정보 업데이트가 이루어지는 것이니 옵저버 패턴인지 아닌지 궁금해졌다. 그리고 알아 본 결과 ReplicatedUsing은 옵저버 패턴이 아니었다. ReplicatedUsing은 멀티 플레이 환경에서 서버와 클라이언트 간에 상태를 동기화할 때 사용한다. Replicate된 변수가 서버에서 변경이 된다면 바인딩 된 클라이언트의 함수를 호출하는 방식으로 이루어진다. 즉, ReplicatedUsing은 디자인 패턴이라기 보다는 네트워크 기능으로 분류되며, Replicate선언 된 변수가 서..

화가 난다... 잘 작동하던 코드가 코드 좀 바꿨더니 아래와 같은 에러가 뜨면서 오류가 났다.. 이 오류 때문에 꼬박 이틀을 날렸다.. 하루하루가 중요한 시기인데.. 분명 코드가 문제 없이 돌아가고 있었고 원하던 대로 구현 중이었는데 이 문제로 몇 번을 갈아 엎었다. 물론 갈아 엎으면서 코드가 좀 깔끔해지긴 했지만 그래도 이틀은 좀.. 구글링 한 결과 피직스 에셋에서 메시 루트 본 키네마틱 어쩌고 하는데 그 전까진 됐기에 이 건 문제가 아닌 것 같고 정말 답답했다. 아무튼 이 것은 스켈레탈 메시 소켓에 AttachActor로 액터를 붙일 때 발생한다. 그런데 만약 붙일 액터의 Simulate Physics가 true이면 발생하는 문제였던 것이다. 그래서 Attach하기 전에 Simulate Physics..

대부분의 게임엔 게임 플레이 타임이 표시된다. 하지만 컴퓨터마다 접속 시간이 달라 동시에 게임에 입장한다고 하더라도 컴퓨터마다의 속도가 다르기 때문에 GetWorld()->GetTimeSeconds()로 시간을 받아온다면 서버와 클라이언트마다의 시간이 모두 달라 게임에 악영향을 끼칠 수 있다. 그래서 서버 컴퓨터의 시간으로 클라이언트에 맞춰줄 필요가 있다. 그렇다면 서버와 클라이언트 사이의 시간 차를 구하여 클라이언트 컴퓨터에 연산하는 방향으로 일을 처리해야 한다. 과정은 아래와 같다. 먼저 클라이언트의 전송 시각과 서버가 수신 후 전송 시각을 전송한 클라이언트가 이를 수신하면, 수신한 데이터와 수신한 시각을 바탕으로 서버와 클라이언트 사이의 시간차를 구한다. C++코드로 구현을 해보았다. 이는 HUD에..
멀티플레이에 대한 지식을 쌓아보자! 여태껏 프로젝트 진행을 적지 않게 했지만 항상 게임을 만들었지, 공부 목적이 강한 프로젝트는 없었다. 그래서 최근에 Rpg와 멀티 플레이를 제대로 공부하며 기능 위주 구현에 초점을 맞추는 프로젝트를 시작했다. 일단 멀티플레이에 대한 개념을 익힌 후 Rpg 장르도 만들어 볼 계획이다. 짧게 끝

ue5의 애니메이션 리타겟이 ue4와는 조금 달라졌다. 기존 ue4는 스켈레탈 애셋 내의 리타겟 매니저의 Set up Rig 카테고리에서 진행했었다. Select Rig에서 휴머노이드 릭을 선택하고 각 본에 맞게 리타겟을 해주는 방식이었다. 하지만 ue5에는 이 Set up Rig 카테고리가 없다. 대신에 아예 블루프린트로 독립되어 있다. 먼저, 콘텐츠 브라우저에서 마우스 오른쪽 클릭->애니메이션->IK 릭에서 IK 릭을 선택한 후, 리타겟 시킬 두 스켈레탈의 블루프린트를 각각 생성한다. 그 후, 블루프린트를 보면 오른쪽 아래에 "IK리타기팅" 창이 있다. 해당 창에서 "새 체인 추가"라는 버튼이 있는데, 이는 본들을 그룹화하는 역할을 한다. 예를 들어, spine이란 이름들을 가진 본들을 다중 선택한 ..

SetInputMode_UIonlyEx 함수의 두 번째 매개변수로 포커스 할 Widget을 정할 수 있는데, 여기서 오류가 발생할 때가 있다. 말 그대로 포커스할 수 없는 Widget을 포커스 했다는 뜻이다. 해당 위젯 디테일 설정에서 아래와 같이 바꿔주면 된다.
fps는 컴퓨터의 하드웨어마다 모두 다르기 때문에 deltatime 또한 다르게 계산된다. (참고 - https://sheep-adult.tistory.com/56) 그런데 언리얼 엔진에서 InputAxis 함수는 매 프레임마다 호출이 되지만 deltatime 매개 변수가 없고 Tick 함수와 분리가 되어 있기 때문에 어떤 방식으로 처리되는지 헷갈릴 수 있다(제가 그랬..). 그렇다면 입력 값은 캐릭터의 움직임과 deltatime에 대해서 어떻게 처리될까? 먼저, 만약 사용자가 입력을 하면 InputAxis의 인자로 입력 값이 전달된다. 입력 '축'이므로 음수 값과 양수 값이 존재할 수 있고(일반적으로 일반 input은 프로젝트 세팅의 "입력" 카테고리의 값, Enhanced Input에서는 인풋에 관련..
요즘 13iew 프로젝트를 끝내고 취업준비를 하다보니 다시 게임 개발이 하고 싶어 Unreal Engine 5.1로 개인 공부를 하기로 마음 먹었다. 게임을 만드는 것은 아니지만 여러 기능들을 공부하며 엔진 사용법에 더 익숙해져야 겠다. UI / Widget을 좀 깊게 공부해 볼 생각이며 sublevel을 나누어서 13iew때 늦게 알아 적용하지 못한 레벨 나누는 것도 공부해보고, 시간이 된다면 멀티 플레이공부도 2021년보다 좀 깊게 해서 게임 개발 역량을 늘려야 겠다... ㅎㅇㅌ..
에디터에서 원하던 대로 작동하던 코드가 패키징을 하거나 에디터에서 독립형 게임으로 실행을 시킬 경우 물체를 움직이거나 게이지를 채운다거나 하는 행동에 속도 차이가 생길 수 있다. 이는 프로그램을 실행하는 하드웨어의 속도가 다르기 때문에 생기는 문제이다. 이러한 문제의 해결법으로는 deltatime이 있다. deltatime은 1초를 fps값으로 나눈 값을 저장하는 변수이다. 예를 들어, 60fps인 경우, 1 / 60 (0.01666...)을 detatime으로 저장한다. 그럼 이게 왜 해결책이 될까? 만약 Unreal의 경우 Tick함수, Unity의 경우 Update함수에서 일반적으로 1프레임마다 함수를 호출하게 되는데, 방금 말했듯이 하드웨어의 속도가 60 혹은 30 등 fps가 다르면 계산한 결과..