FCB (End) - Plugins & Libraries

JUSTICE_DER·2023년 2월 28일
0

🌵UNREAL

목록 보기
20/42

Unreal Engine 5 – Full Course for Beginners
https://www.youtube.com/watch?v=6UlU_FsicK8


Creating Plugins

  • plugin탭에서 Add를 누르면 다음과 같이 뜨게 된다.
    여기서 Blank플러그인을 생성한다.

  • 우선 현재 프로젝트의 빌드파일을 연다.

  • 보면 Core ... 부터 4개의 모듈로 이루어졌다고 한다.
    플러그인도 생성하면, 하나의 모듈로서 동작하기에,
    플러그인을 사용하려면 저곳에 이름을 추가해야만 한다.

  • 다음과 같이 추가한다.

  • Blank Plugin을 추가하면, 자동으로 plugin폴더가 생기게 된다.
    여기에 Actor를 추가해보았다.

  • 여러종류를 추가해본다.
    이번엔 C++ 인터페이스인데, 모듈이 달라서 다르게해야된다나
    다르게 설정한다.

  • 계층구조가 기존 MyInterface와 다르게 나뉘는 것을 볼 수 있다.

  • 그리고 해당 Plugin을 활성화 해주어야만, 사용할 수 있게 된다.

  • package를 누르고 저장하면, 다른 프로젝트에서도 사용할 수 있도록
    플러그인을 추출해낼 수 있다.

  • 다른데서 해당 플러그인을 사용하려면,

  1. 해당 플러그인 폴더를 그대로 복사하여
    새로운 프로젝트에 Plugins폴더에 붙여넣으면 된다.
  2. 똑같이 Build 파일내에 모듈이름을 추가하면 된다.
  3. 플러그인이 제대로 활성화되어있는지 확인한다.

추가로 해당 프로젝트에 폴더를 만들거나, 파일에 변경이 있는 경우,
해당 프로젝트를 VS로 generate하는 것을 계속 해주었다.


ThirdPartyLibraries (static)

  • 제 3자라이브러리라는 의미로,
    효율적인 개발을 위해 주로 플러그인과 라이브러리를 만들게 되는데,
    이게 공통적인 언어로 그냥 제작하는 것이고,
    언리얼만을 위한 것이 아니기 때문에, 언리얼에서는 변환이 필요하다.

  • 예를들어, C++로 만들어진 third라이브러리를 사용한다면,
    해당 C++는 언리얼을 위해서만 만들어진 것이 아니기 때문에,
    C++ STD라이브러리의 String자료형을 사용할 것이고,
    언리얼은 언리얼 전용의 FString을 사용해야하기에 그대로 사용하기에는 격차가 존재한다.

  • 해결할 수 있는 방법이 존재하고, 해본다.
    Load TPL from sample 뭐 이런 창이 뜨면서 VS창이 생성이 된다.

  • VS창을 끄고, 폴더로 가본다.
    ThirdParty는 TPL을 가지고 있는 폴더이고,
    TPL_TestPlugin은 Plugin content를 가지고 있는 폴더라고 하는데
    뭔말인지

  • ThirdParty에 들어가면 다음과 같은 ExampleLibrary들이 있다.
    이걸 지워도 된다고 한다.

  • 그리곤 VS코드에서, 정적라이브러리를 선택하고,
    지웠던 폴더에 해당 템플릿의 프로젝트를 만든다.

다음엔 위에서 솔루션 및 프로젝트를 같은 디렉터리에 배치 클릭

  • 그래서 만든 것들을, 지웠던 것을 다시 채워넣는 느낌으로
    디렉터리 구조를 바꾼다.

  • TPL플러그인의 빌드파일을 들어가본다.
    Mac과 Linux에 대한 코드인데, Window만 할 거면 삭제해도 된다고 함. 바로 삭제

  • DLL 관련기능을 사용하지 않을거라 아래 2줄도 지운다고 한다.

  • 그리고 해당 구문을 실행한다.


오류


사용자 임의로 내용물을 이동하고 폴더를 삭제해서 sln이 인식을 하지 못한 것 같다.

프로젝트와 솔루션항목을 체크해야 문제가 없는듯하다.
임의로 위처럼 폴더를 만들고 proj파일을 넣으니 문제는 없어진다.

하지만 예제와 같은 파일구조가 나오질 않아서 따라할 수 없어서 처음부터 새로 만들어야 할듯하다


ThirdPartyLibraries (2)

  • 솔루션과 프로젝트를 반드시 반드시 같은곳에 배치를 해야만
    아래처럼 소스파일등 폴더 구조가 정상적으로 보인다.

  • 그리고 디버거를 디버그모드에서 릴리즈모드로 바꾼다.
    [릴리즈모드와 디버그모드의 차이]

  • TestClass라는 사용자정의 클래스를 만들려고 한다.
    헤더는 다음과 같이 CPP의 string을 이용한 함수와 변수를 두었다.
    외부 CPP라이브러리의 std::string을, 언리얼의 FString으로 가져와보기 위함이다

  • 그리고 용도를 모를 기존에 있던 pch.h에 헤더를 상속받게 한다.

  • 릴리즈모드로 실행하면, 빌드는 성공하지만 오류가 뜨게된다.
    최종적으로 코드를 릴리즈하면 lib 파일이 나오고, 실행이 안되기 때문인 것 같고,
    exe파일을 만들려고 한 것이 아니기 때문에 무시해도 된다.

  • release이후, x64의 release로 해당 폴더가 생긴 것을 볼 수 있다.

  • 그리고 해당 빌드파일 모듈부분에 지금 만든 라이브러리를 추가한다.

  • 여태 한 것은 ThirdParty의 작업이었는데,
    언리얼용이 아닌, 제3자 라이브러리를 ThirdParty에서 적용을 시키고,
    언리얼에서 사용하기 위해 만든 TPL_TestPlugin으로 Wrap을 해서
    언리얼의 플러그인으로서 사용한다고 한다.

  • 플러그인을 실제로 구현시킬 C++파일을 만든다.
    언리얼상 해당TPL폴더내에 오브젝트를 생성하기 위해 설정까지 한다.

  • 그리고 파일을 생성하면 VS로 자동으로 이동하는데,
    그대로 생성하면 다음과 같은 오류가 발생한다.
    그 이유는, UObject에 대한 헤더가 없기 때문인 것 같다.
    #include "UObject/Interface.h"가 존재해야하는데, 이상한게 들어와있다.

  • BeginerCourse의 빌드파일에 CoreUObject라는 것이 필요하다고 한다.

  • TPL_TestPlugin의 빌드파일에는 빠져있는데,
    dependency module부분에 똑같이 추가한다.

  • 그렇게 되면 프로젝트의 빌드가 정상적으로 실행된다.
    즉, 해당 C++파일에 언리얼 관련 모듈을 넣어주어야만 플러그인이든, 프로젝트든 정상적으로 빌드가 되는 것이다.

  • WrapperObject로 해당 TPL_TestPluginLibrary의 기능을 실행해볼 것인데,
    해당 Library내에 구현한 코드인 TestClass를 사용할 것이다.
    그리고 다음과 같이 헤더를 추가한다.


오류

계속 FString과 UObject부분에 밑줄이 그어진다.
정의되지 않았다는 말인데..

찾아보니 생각보다 악명높은 녀석인듯 하다.
MSB3073 (code6)
https://www.programmersought.com/article/75497690819/

보는데 틀린부분은 없는것 같다.

C1007문제는 현재 컴파일하려는 2022가 아닌,
2017으로 라이브러리가 만들어져서 생기는 문제 같다.
https://stackoverflow.com/questions/20936074/getting-fatal-error-c1007-unrecognized-flag-archvfpv3-d32-in-p2-error-wh


C1007 - 해결법을 찾긴 했는데, 프로젝트 설정에 C++를 수정해야한다.


해당 설정메뉴가 없다.

C++ 설정도 없음
https://developercommunity.visualstudio.com/t/property-pages-cc-category-missing/87843

프로젝트에 C++파일이 하나라도 있어야 뜬다고 하는데,

이게 다 cpp파일이고, plugin에도 있다.

정적라이브러리로 프로젝트를 바꾸었다.
https://stackoverflow.com/questions/2309091/can-not-find-c-c-in-project-properties

그리고 해결법대로 하니 해당 오류는 사라지고, 다른 오류가 생겼다.

C1083 - 해결법

설정을 위와 같이 했는데도 오류가 발생.
Pch.h가 문제인듯 하다.

C1083 - 해결법2
Pch.h파일을 만들기로 설정해라.

마찬가지로 해당 오류는 사라지고, 다른 오류가 생겼다.

비슷한 오류..

다른 해결책을 또 썼는데 다시 C2857에러가 뜬다.
C1083을 고치면 C2857이 뜨고,
C2857을 고치면 C1083이 뜬다.

우선 해당 폴더를 삭제해버렸다.
지금 예제에서 쓰이지 않기 때문이다.


이번에도 뜬다. 파일만 바꿔서 뜬다.


분명히 미리 컴파일된 헤더를 사용안한다고 했는데
왜 사용하려고 하고 열 수 없다고 하는지 모르겠다..
에러의 원인이 논리적으로 이해가 안된다.


직접 헤더를 추가해주어도 적용이 되지 않는데,
pch.h가 유일하지가 않은가?
해당 위치로 직접 가봐야겠다.


이게 문제의 파일인데, 디렉토리에 버젓이 존재하는데 왜 문제일까

C1083 - 해결법

폴더구조에 특수문자와 띄어쓰기가 있는 경우, 해당 오류가 발생한다는데
그런거 없다.

C1083 - 해결법2
헤더 cpp파일을 YC로 미리 만들고,
프로젝트에서 미리 만든 헤더 사용을 하면 해결된다고 한다.

마찬가지로 해당 오류는 사라지고, 다른 오류가 생겼다.


말 그대로 명령줄 옵션이 달랐다.
지워야할지 붙여야할지.


지우는 것보다 붙이는게 낫다고 생각해서 헤더부분에 해당 코드를 붙였더니 위처럼 뭘 추가하라고 한다.


그대로 추가했는데 파일이 없다고 한다.
이전에 디렉토리에 직접 들어가서 있는 것을 확인했는데..
돌고돌아 C1083으로 또 돌아왔다.

라이브러리는 나중에 알아보는걸로 하자..

  • 추가로 플러그인 이후 이것저것해보면서 오류를 없애다가 프로젝트가 망가졌다. 하..


끝맺음이 좋지 않지만, 끝내려고 한다.
기초적인건 다 배운 것 같고,
이후의 것은 특수한 개념의 심화적인 내용이라
배우고 사용하지 못하면 의미없을 것 같아서 여기까지만 본다.

Unreal Engine 5 – Full Course for Beginners
https://www.youtube.com/watch?v=6UlU_FsicK8

profile
Time Waits for No One

0개의 댓글