문제 : 엔진 플러그인의 헤더파일을 include하려는데 인텔리전스에 나오지 않는다.

 

 

새벽이라 집중력이 떨어져서 막무가내로 검색하면서 찾다가

거의 3시간 구글과 똥꼬쇼 하다가

에러를 다시 자세히 보고 유추했더니 성공했다..

 

 

그래서 

지금 중력 플러그인을 적용중인데

bulid.cs에 모듈이름을 넣어도 인텔에 하나도 안뜨더라...

Gravity~.h 를 찾지만 개같이도 안 뜨는 모습

 

그래서 당연히 정상이 아닌 줄 알았다..

 

문제 해결

 

다 상황이 다르겠지만 이번 같은경우는 두가지 문제가있었다.

 

  • 첫번째

인텔리전스에 뜨지않아도 include가 정상적으로 돌아감..

이게 제일 어이 없었는데 안떠도 되더라....

인텔 오류인듯하다..

 

  • 두번째

플러그인 헤더파일이 두가지가 있다.

[Character형 클래스 A]

[Character Movement Component파생형 클래스 B]

 

A는 B를 전방선언중이다.

 

A는 기존 Character Movement Component를 B로 변경하려 전방선언하여

생성자에 FObjectInitializer.SetDefaultSubobjectClass를 사용하여 변경하는 상황이다.

 

 

언뜻 보면 아무 문제 없지만

 

FObjectInitializer.SetDefaultSubobjectClass 내부에 템플릿으로 들어온 클래스에 StaticClass()가 실행되기에

A에 B를 전방선언만 해놓았기 때문에 B가 정의가 없어 오류가 났던 것이다.

 

플러그인이 잘 적용되었는지 A만 Include하여 테스트 했던 나는

플러그인이 추가되지 않은건지 고민하며 헛짓거리를 하며 시간을 보냈다..

 

결국B도 같이 Include하여 해결했다...

 

근데 자세히 생각해보면 이게 같이 Include한다고 하여서 해결되는 문제인가? 했다.

일단 이건 다른 글에 자세히 적어야겠다.

 

느낀점

검색부터 하지말고 일단 오류를 자~~~세히 보고 올라타서 끝까지 보자^^

하나의 StaticMeshComponent 를 가지고 StaticMesh만 변경해야하는 기능이였는데

 

블루프린트에서의 SetStaticMesh는 문제 없이 잘 돌아갔지만

 

C++에서의 SetStaticMesh는 메시는 잘 들어갔지만 머터리얼은 이전게 계속 유지되고있었다

[이 사실을 죤내 늦게 파악했다.. 담에는 더 자세히 파악해야겠다]

 

나중에 다른곳에서도 그런지 파악해봐야겠다

 

 

문제해결로 Material도 같이 변경해주었다

쥰내 이상한? 버그였다

 

내가 작성한 컴포넌트명이 ABC 라고 하면

ABC 프로퍼티를 읽으려던 중 None 에 접근했습니다.

(Accessed None trying to read property ABC)

라고 로그가 떴다.

 

내가 인스턴스화를 안했나? 싶었는데 잘 되어있었다;

만든 컴포넌트를 넣을 액터의 헤더
만든 컴포넌트를 넣을 액터의 CPP

 

검색 후 비슷한 증상을 겪은 사람이 있었나 보다

https://answers.unrealengine.com/questions/740355/c-uproperty-actor-component-variable-being-set-to.html?sort=oldest 

 

다들 원인은 UPROPERTY를 변경함에 있어서 생긴 문제로 파악하고 있다

 

해결방법은 죤내 어이가 없었는데

변수명을 바꾸면 된다

ㅋㅋㅋㅋㅋㅋ

(좌)header (우)cpp

테스트로 변수명뒤에 2를 붙였는데 잘됐다..

 

그 후로 다시 변수명을 되돌려도 잘되더라~~

 

이것때문에 얼마나 시간을 썼는지 ㅠ

Hand IK 를 구현 중에

 

player BP에서 Anim BP로 보내주는 sockt Location이 있다

 

이 위치에 왼손을 붙이는게 목적이였는데

 

서있을 때는 잘 되는것처럼 보였지만 달리면 계속 이전 프레임의 Location을 받아오고

시간을 느리게하면 잘 붙어서 정말 뭔가했다

 

달리면 손이 손잡이에 붙지 않는다 씨빠!

 

이전 프레임의 값을 받는다는건 Tick의 순서가 내가 원하는 순서가 아님에 분명하다라는 생각이 들었다

 

열심히 검색 후 틱그룹 이라는 걸 알게된 후 이걸로 해결했다

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Actors/Ticking/

 

액터 틱

매 프레임 액터를 업데이트하는 데 사용되는 Tick, 틱 시스템에 대한 설명입니다.

docs.unrealengine.com

 

나중에 한번 포스팅해야겠다

 

클래스 디폴트에 들어가 액터의 틱을 변경 할 수 있다

근데 나는 액터의 틱그룹이 아닌 Anim BP의 틱그룹을 변경해야했다

 

그래서 Anim Bp의 클래스 디폴트창을 보았지만 없어서 변경하는 법을 찾았다

 

Anim BP를 사용하는 Mesh에서 찾을 수 있다

 

 

Anim BP를 사용하는 컴포넌트(나의 경우 SkeletalMesh Component) 의 틱그룹을 변경해주면 

 

Anim BP의 틱그룹도 같이 변경됐다.

 

해결 후 잘 붙어있다

+ Recent posts