문제 : 

어떤 공격에 의해 맞는 처리를 하는 컴포넌트가 있어서

맞을때만 Tick을 켜주려고 생성자에 bCanEverTick를 False로 해놓고 뒤에서 조정하려했는데

이상하게 bCanEverTick이 먹혀들지가 않고, 함수인 SetComponentTickEnabled또한 먹히지 않았다.


문제 해결

https://forums.unrealengine.com/t/component-bcanevertick-has-no-effect/387533

비슷한 문제이다.

 

일단 생성자에서 bCanEverTick을 False로 두면 조정 자체가 안되어 무조건 true로 둘수밖에 없었다.

 

ActorComponent.h에서 Tick조정 함수들을 보다보니까 SetComponentTickEnabledAsync라는 함수가 있어서

BeginPlay에서 사용해 보았는데 다행히 잘 조정되었다.

 


느낀점

문제가 생기면 그 상속받은 클래스에서 관련 데이터가 있는지 항상 봐둬야겠다.

문제 : 

이러한 배열에서

 

이렇게 찾으려고 했더니만

 

이런 오류가 났다.


문제 해결

해결이라기보다는 추측인데

int와 int는 값을 비교할 수 있다.

하지만 FHitResult는 어떻게 비교해야 같은지 알까?

 

깊게 생각해보니 정의 되지 않았을 확률도 높다고 생각한다..

 

애시당초

if( FHitResult == FHitResult) 도 안되는거 보면 당연했던거다.. ㅠ


느낀점

잘 생각해보면 다른 방법으로 찾았겠지만

계속 안되는걸 붙잡고 있는거 같았어서 포스팅한다.

 

담엔 좀 더 깊게 생각해보자

문제 : 

테스트하려고 패키징한 게임에서 1분내 랜덤한 타이밍으로 갑자기 안움직이길래

아 ㅅㅂ 뭐지? 했다.

 

여러가지 디버깅을 해보니 플레이어의 상태를 관리하던 객체 데이터가 날라가는것 =~=

나는 그 상태에 따라 움직이기 때문에 값이 날라가버려 움직여지지 않았던 것이다ㅋㅋ

 

상태를 관리하는 Enum값이 0아니면 1, 2, 3이 되어야 할 애들이 갑자기 253이렇게 바뀌고 난리였다~


문제 해결

내가 관리하는 상태 클래스를 Player클래스에서 포인터 타입으로 가지고 있었다.

하지만 UPROPERTY가 붙지 않은...

 

UPROPERTY가 붙지않은 포인터는 GC에서 걸려지기 때문에

내 상태 데이터가 GC에서 자동으로 걸러지는거였더라리~

 

바로 UPROPERTY붙이고 실행하니 다행이 해결 되었다.


느낀점

엔진에서 다룰 필요가 없기 때문에 UPROPERTY를 붙이지 않았는데

이제 이러한 문제 까지 고려해야겠다

 

잘 배웠다

문제 : 

특징

  1. 몇번 에디터에서 잘 실행 되다가 갑자기 터진다.
  2. C++에서는 잘 빌드가 된다.
  3. 터진 후로는 실행버튼을 눌르면 터지거나 저 함수가 들어간 블루프린트를 열면 터진다

 


문제 해결

 

임시방책으로 변수명을 바꾸면 다시 잘 돌아가나 정말 임시방책이며 다시 터짐이 찾아온다.

 

해결방법은 null check를 해주면 된다.

저 3은 임시방책을 사용하여 다시 터진 횟수를 보여준다

 


느낀점

너무 기본적인건데 안하고 있었다는게 좀 바보 같았고

기본적으로 체크하고 처리해야하는 것들을 다시 정리해야겠다.

문제 : 


문제 해결

번역하면 "이 클래스의 애니메이션 그래프에서 중복 항목을 제거하세요."

말 그대로 해결하면 된다.

 

나는 하나의 몽타주 재생 슬롯을 Falling, LandMovement 스테이트에 중복으로 넣어 두었다.

 

쉽게 해결 하는 방법은 캐시포즈를 이용하면 된다.

사용하고자 하는 State에 저 캐시포즈를 사용하면 해결할 수 있다.


느낀점

간단하지만 한번 짚고 넘어가자 느낌으로 포스팅

문제 : 

C에서 작성한액터 액터 컴포넌트의 디폴트 값을 정하려 했는데 암것도 안나오길래 뭐지 했다.

 


문제 해결

전에 비슷하게 난 아무것도 안했는데 액터 컴포넌트를 참조 못하는 경우가 있어서 혹시하고 해봤는데 맞더라..ㅜ

 

버전 문제인가??ㅠㅠ

 

https://ddidding.tistory.com/52

 


느낀점

시간 아꼈고~~~~

문제 : 

이러한 로그가 나와 해결하려했다.

 


문제 해결

 

로그를 통해 정확히 어느 부분에서 발생했는지는 알수 없지만 확실한건

로그에 나와있듯이 밑의 함수를 사용한 블루프린트에서 나왔다는걸 알 수 있다.

아무튼 그래서 의심되는 블루프린트에서 검색을 해봐야한다.

 

저런 수식같은 함수는 이런 식으로 검색 해주면 나온다.

 

확인해보니

저 UpdateVelocityBlend에서 발생하는거였지만

함수문제가 아닌 로직 문제였다.

 

캐릭터의 스피드로 값을 나누는데 스피드가 0이면 저 함수가 실행되지 않았어야 하는데

상태변경에 문제가 있어서 해결하여 더 이상 나오지 않았다=~=

 


느낀점

warning이 안나오니 넘 시원하고~~~

문제 : Tick 순서로 인한 문제

 

Player클래스 안의 wall run component와 tick순서 문제 때문에 발생했는데

Wall run이 실행될 때 가까이 있는 벽과 적당한 거리를 두고 붙어야 하기때문에

붙은 벽의 정보를 wall run component에서 가져왔어야했는데

 

wall run component의 업데이트함수(Tick)가 아직 실행되기 전이라서

wall run중인 벽의 정보가아닌 초기값(zero vector)을 가져오고있었다.

 

그래서 tick순서 같은 검색어로 찾던 중 Tick 종속성에 대한 기능이 있었다.

 


문제 해결

생성자 맨 밑부분에 AddtickPrerequistieComponent( walRuncomponent )부분이 해당 부분이다.

walRuncomponent의 tick이 실행되고 나서 ACPlayer의 tick을 실행한다는 의미이다.

 

포함 component뿐 아니라 포함 Actor도 설정 가능한듯!

 

※이 개념과 관련 개념이 좀 깊어서 따로 포스팅을 한번 해야할것같다.

 


느낀점

매우 당황했지만 문제점 추리하여 차분히 디버깅하는 내 모습 잘했다.ㅋㅋㅋㅋㅋ

+ Recent posts