Radial Blur를 만들어서 파라미터로 블러 값을 조절하려고했다.

 

그래서 내가 위에서 설정한 블러 값을[ ex) 0.432 ] 처음에 불러와서 블러값의 최대치로 사용하려고 Get을 찾았다.

뭐 SetScalarParameterValue함수도 있으니 당연히 바로 받는 Get도 있을거라 생각했는데 없었다.. =~=

 

 

클래스들을 찾아보니 파라미터값을 받는 함수들은 모두 MaterialParameterCollection이란거를 사용했다.

보통 머터리얼을 에디터에서 조작하기때문에 같이 쉽게 조정하려고 에디터상에서 만들어준다

 

 

그래서 이렇게 디폴트 값을 정의 해준다

 

 

MaxBlur 노드가 MaterialParameterCollection노드이다.

그래서 맥스값과 같이 0 ~ 1까지의 값을 곱하여 사용하기로 했다.

 

 

#include "Materials/MaterialParameterCollection.h" 를 include해주고

생성자에서 이런 식으로 값을 가져왔다 =~=

 

 

문제 : 

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

맞을때만 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에 저 캐시포즈를 사용하면 해결할 수 있다.


느낀점

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

현재 구현하고 있는 Wall run은 Character movement mode를 Flying으로 설정하여 사용하고 있고

Wall run중에 땅에 닿으면 자동으로 해제를 하려고 했다.

 

기존에 착지 이벤트를 Landed를 override하여 사용하고 있어서

자동으로 되겠거니 했는데 안타깝게도

Flying모드에서는 Landed가 호출이 되지 않더라 =~=;;

 

Trace를 사용하여 하는 방법이 있겠지만 뭔가 따로 Trace를 쓰지 않는 섹시한 방법이 있지 않을까? 했다..

그래서 CharacterMovement를 보던 중에 뭔가 그럴듯한 함수가 있었다

 

CharacterMovement에 있는 FindFloor함수를 사용한다.

Capsule에 collision이 켜져있지 않으면 의미없다고 한다

 


ACharacter를 상속받은 클래스에서의 사용

첫번째 매개변수는 캡슐의 위치를 넣는다고 하는데 나는 캐릭터에 붙어있는 캡슐의 위치를 원하니까

GetActorLocation과 같은 위치이기 때문에 GetActorLocation를 넣어주었다.

 

두번째는 결과값이 담기는 구조체

 

세번째는 마지막 테스트 값을 사용할수있다 인데  아직은 잘 모르겠다.

 

IsNearlyZero의 0.007f는 Wall run중에 바닥에 닿으면 0.005정도 오차가 있었기에 0.007로 오차허용을 해주었다.

 


Wall run중에 깔끔하게 지면으로 내려간다 =~=

 

문제 : 

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

 


문제 해결

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

 

버전 문제인가??ㅠㅠ

 

https://ddidding.tistory.com/52

 


느낀점

시간 아꼈고~~~~

+ Recent posts