본문 바로가기

언리얼/버그 일지5

[UE4]애님노티파이를 이용시 발생했던 버그(루프 애니메이션이 아닌 경우) 애니메이션 공격동작의 특정 부분에 AttackEnd라는 노티파이를 추가하여 스테이트를 IDLE로 전환하는 작업을 진행 중이었다. 처음에는 IDLE 스테이트로 잘 돌아왔지만 두번째 공격 애니메이션 재생시 IDLE로 전환되지 않고 애니메이션이 끝난 채로 캐릭터가 멈춰버렸다. 코드 상의 문제인가 싶어 이리저리 살펴봤지만 그냥 하루만 날렸다. 알고 보니 공격 애니메이션은 루프 애니메이션이 아니였고 한번 재생이 된 후, 처음으로 되돌아가지 않아 노티파이 역시 동작하지 않고 있었다. 애님 블루프린트이 스테이트 머신에서 해당 스테이트를 클릭하고, 디테일에서 Always Reset on Entry를 체크해주자. 2018. 12. 5.
[UE4]Anim 블루프린트 Threadsafe 경고 해결 애니메이션 블루프린트에서 트랜지션룰을 셋하고 있다. GetCurStateType은 enum값을 가져오는 함수로 meta = (BlueprintThreadSafe)가 UFUNCTION 내에 선언되어 있다. 그런데도 자꾸 저런 경고가 뜬다. 블루프린트 함수를 뒤져보니 GetPlayerCharacter와 형변환은 meta가 NotBlueprintThreadSafe로 되어 있었다. 이 문제를 해결하는 방법은 두가지가 있었다. 1. 클래스 세팅에서 Multithread 옵션을 끈다.2. 해당 값을 블루프린트 내의 변수에 저장해서 쓴다. 2번을 이용하여 해결했다. Curstate라는 변수에 저장하여 해당 변수를 이용하여 트랜지션룰을 만들었더니 해결되었다. 2018. 12. 5.
[UE4]GC에 의한 UObject 상속받은 객체 삭제 방지 클래스 안에서 UObject를 동적으로 생성하는 작업을 하다보면 가끔 플레이 도중 아무것도 안하고 있으면 0xFFFFFFFF와 같은 에러메세지와 함께 액세스 위반 에러가 뜬다. 콜 스택을 봐도 감이 안잡혀 짐작가는 바는 GC(Garbage collector)밖에 없었다. 해당되는 UObject를 AddToRoot 함수를 사용하여 GC에 의한 삭제를 방지할 수 있다. 예: MyObject->AddToRoot(); 2018. 11. 20.
[UE4][C/C++]auto의 함정(참조) 특정 객체 안의 정보가 담겨있는 구조체 배열을 읽어들이고 수정해야할 상황이 있었는데 auto MonsterInfo = Monster->GetInfo(); //GetInfo는 참조를 리턴 //TODO: 정보를 읽어들여 수정하여 다시 저장한다. 읽고 수정하고 함수가 끝나면 리셋이 되있거나 엉뚱한 값이 들어가 있는 상황이 발생했다. 사수분께 물어봐서 바로 해결했는데 참조를 auto를 이용해 받을 경우 auto앞에 &를 붙여야 한다. 붙인 뒤에는 정상적으로 작동했다. 2018. 8. 9.