일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- game ability system
- unreal engine 5 merge mesh
- ue4 Crash
- tick 사용하지 않고
- 언리얼
- ue4 error
- multithreard chat
- UE4
- bluezone
- Ai
- UnrealEngine
- draw call skeletal mesh
- Unreal Engine Error
- Chat Server
- unity
- Random Map Generator
- deltaTime
- unreal engine
- UE5
- tick처럼 사용
- Unreal Engine 4
- UE
- 채팅 서버
- 13iew
- 언리얼 자기장
- Unreal Engine 5
- Unity Engine
- LittleNightMare
- 랜덤 맵 생성
- 아이작 맵 생성
- Today
- Total
목록Unreal Engine (28)
Class GameDev* SheepAdult
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에서는 인풋에 관련..
에디터에서 원하던 대로 작동하던 코드가 패키징을 하거나 에디터에서 독립형 게임으로 실행을 시킬 경우 물체를 움직이거나 게이지를 채운다거나 하는 행동에 속도 차이가 생길 수 있다. 이는 프로그램을 실행하는 하드웨어의 속도가 다르기 때문에 생기는 문제이다. 이러한 문제의 해결법으로는 deltatime이 있다. deltatime은 1초를 fps값으로 나눈 값을 저장하는 변수이다. 예를 들어, 60fps인 경우, 1 / 60 (0.01666...)을 detatime으로 저장한다. 그럼 이게 왜 해결책이 될까? 만약 Unreal의 경우 Tick함수, Unity의 경우 Update함수에서 일반적으로 1프레임마다 함수를 호출하게 되는데, 방금 말했듯이 하드웨어의 속도가 60 혹은 30 등 fps가 다르면 계산한 결과..
언리얼 엔진 위에서 Delay 기능에 대해 구글링하면 람다 함수를 활용하는 방법이 나온다. 예를 들어 아래와 같다. FTimerHandle WaitHandle; float WaitTime; GetWorld()->GetTimerManager().SetTimer(WaitHandle, FTimerDelegate::CreateLambda([&]() { // 딜레이 후 코드 }), WaitTime /*대기 시간*/, false /*반복*/); 그런데 "만약 딜레이 후 코드" 부분이 레벨이 바뀐 후 호출된다면 크래쉬가 나버린다. 그래서 처음엔 코드에 작성된 객체의 포인터가 레벨이 바뀌면서 참조 해제되어 null을 가리켜서 그런가 보다 생각해 객체를 null check를 해주었다. 그런데도 크래쉬가 났다... 좀 더..
Nav Mesh를 런타임 중 변경하는 것은 구글링을 해보면 쉽게 알 수 있는 내용이다. 바로 아래와 같이 Runtime Generation을 Dynamic으로 바꿔주면 된다. 프로젝트를 생성한 후 아무런 설정도 건들지 않았다면 실행이 잘 되겠지만 본인도 모르는 사이에 설정을 바꿨다면 위의 값이 Dynamic이어도 runtime에 nav mesh가 바뀌지 않을 때가 있다. 바로 Navigation System의 설정값 중 "초기 빌드 잠금"이 true일 경우이다. 저 값을 true로 설정하면 내비게이션 시스템의 내비게이션 리빌드가 ReleaseInitialBuildingLock()을 호출할 때까지 중지된다.
TMap Container에 TArray를 Key나 Value로 저장하려고하면 Nested Container이기 때문에 저장할 수 없다고 에러 메세지가 뜬다. 이럴 경우 USTRUCT를 하나 선언한 후 이 안에 Nested Container를 담으면 된다. 아래는 예시 코드이다. USTRUCT() struct FTest { GENERATED_BODY() public: UPROPERTY() TArray Transforms; }; USTRUCT(Atomic, BlueprintType) struct FLevel1Struct { GENERATED_BODY() public: UPROPERTY() TMapTestData; }
먼저 InVisible하게 만들 오브젝트의 디테일 창의 렌더링 카테고리에서 Hidden In Game을 true로 설정해준 뒤, Lighting 카테고리의 Hidden Shadow를 true로 설정해주면 된다. Hidden Shadow는 Hidden으로 설정되었을 때 Shadow Cast해주는 기능을 한다.
본론부터 말하자면 CallFunctionByNameWithArguments 함수를 사용하면 된다. 해당 함수는 인자로 FOutputDeviceNull을 받는데 #include "Misc/OutputDeviceNull.h"를 include 해줘야 한다. #include "Misc/OutputDeviceNull.h" ... void ATest::TestFunction() { FOutputDeviceNull Ar; CallFunctionByNameWithArguments(TEXT("BPFunction"), Ar, nullptr, true); }
Assertion failed: IsSet() [File:D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Misc/Optional.h] [Line: 190] It is an error to call GetValue() on an unset TOptional. Please either check IsSet() or use Get(DefaultValue) instead. 이라는 문구가 나오면서 특정 오브젝트 클릭할 때마다 크래쉬가 났다. 넷상에 정보가 아예 없어서 혼자 끙끙댔다,, 분명 생성자가 문제일 것 같았지만 생성자는 수정한 것이 없었는데 이런 문제가 나와 당황스러웠고, 하루 동안 깃 디스카드하고 클래스 다시 만들고 하는 삽질을 한 결과 string(Te..