[Unreal Engine 4] VS Code 환경 구성

ToToMo·2021년 8월 21일
0

Unreal Engine4

목록 보기
1/1
post-thumbnail

이 포스트는 Unreal Engine4를 공부하면서 겪었던 문제들과 해결 방법들에 대해 공유하고자 작성했습니다.

Unreal Engine4에서 Visual Studio로 작업하다 보면 갑자기 바보 같아 지는 intellisense를 보자니 답답하고 자동완성도 엉망이여서 코딩하다가 내가 머하고 있는지 생각이 들었습니다. Unity에서 스크립트를 작성할 때는 Visual Studio Code로 쾌적하게 잘 했던 생각이 들어, UE4에서도 VS Code로 코딩할 수 있다고 생각해 찾아보았습니다.

그런데 생각보다 공식 문서도 그렇고 유튜브 내용도 친절하지 않더라고요. 어떻게 하다보니 운 좋네 잘 해결할 수 있게 되어 UE4에서 VS Code로 코딩하고 싶어하시는 분들을 위해 알려드리고자 합니다.

UE4 Editor 변경

편집 - 에디터 개인설정 - 일반 - 소스 코드 - "Visual Studio Code"

아무 프로젝트나 실행하고 편집에디터 개인설정으로 들어갑니다.

좌측에 일반에서 소스 코드를 선택하고 Visual Studio Code로 변경합니다.

변경하면 지금 재시작을 눌러 UE4를 재시작해줍니다.

VS Code 세팅

UE4가 재시작되면 VS Code의 c++ 프로젝트 설정을 위해 편집 - Visual Studio Code 프로젝트 새로고침을 누르면 자동으로 프로젝트의 .vscode 폴더 안에 c_cpp_properties.json 부터 task.json 까지 자동적으로 생성됩니다.

다시 편집에서 Visual Studio Code 열기를 누르면 프로젝트의 이름과 UE4가 나타나게 됩니다.

여기서는 새 프로젝트를 3인칭으로 생성하였으므로 Source/프로젝트명/ThirdPersonCharacter.h라는 파일이 들어있습니다. 파일을 열면 #include errors detected. 라는 오류와 함께 빨간줄이 나타나게 됩니다.

이건 .vscode - c_cpp_properties.json에서 "defines" : [] 부분에 아래의 설정 값들을 복사해주시면 됩니다.

설정 값
"IS_PROGRAM=0",
"UE_EDITOR=1",
"ENABLE_PGO_PROFILE=0",
"USE_VORBIS_FOR_STREAMING=1",
"USE_XMA2_FOR_STREAMING=1",
"WITH_DEV_AUTOMATION_TESTS=1",
"WITH_PERF_AUTOMATION_TESTS=1",
"UNICODE",
"_UNICODE",
"__UNREAL__",
"IS_MONOLITHIC=0",
"WITH_ENGINE=1",
"WITH_UNREAL_DEVELOPER_TOOLS=1",
"WITH_APPLICATION_CORE=1",
"WITH_COREUOBJECT=1",
"USE_STATS_WITHOUT_ENGINE=0",
"WITH_PLUGIN_SUPPORT=0",
"WITH_ACCESSIBILITY=1",
"WITH_PERFCOUNTERS=1",
"USE_LOGGING_IN_SHIPPING=0",
"WITH_LOGGING_TO_MEMORY=0",
"USE_CACHE_FREED_OS_ALLOCS=1",
"USE_CHECKS_IN_SHIPPING=0",
"WITH_EDITOR=1",
"WITH_SERVER_CODE=1",
"WITH_CEF3=1",
"WITH_LIVE_CODING=1",
"WITH_XGE_CONTROLLER=1",
"UBT_MODULE_MANIFEST=\"UE4Editor.modules\"",
"UBT_MODULE_MANIFEST_DEBUGGAME=\"UE4Editor-Win64-DebugGame.modules\"",
"UBT_COMPILED_PLATFORM=Win64",
"UBT_COMPILED_TARGET=Editor",
"UE_APP_NAME=\"UE4Editor\"",
"NDIS_MINIPORT_MAJOR_VERSION=0",
"WIN32=1",
"_WIN32_WINNT=0x0601",
"WINVER=0x0601",
"PLATFORM_WINDOWS=1",
"OVERRIDE_PLATFORM_HEADER_NAME=Windows",
"NDEBUG=1",
"UE_BUILD_DEVELOPMENT=1",
"UE_IS_ENGINE_MODULE=0",
"IMPLEMENT_ENCRYPTION_KEY_REGISTRATION()=",
"IMPLEMENT_SIGNING_KEY_REGISTRATION()=",
"DEPRECATED_FORGAME=DEPRECATED",
"UE_DEPRECATED_FORGAME=UE_DEPRECATED",
"INCLUDE_CHAOS=0",
"WITH_PHYSX=1",
"WITH_CHAOS=0",
"WITH_CHAOS_CLOTHING=0",
"WITH_CHAOS_NEEDS_TO_BE_FIXED=0",
"PHYSICS_INTERFACE_PHYSX=1",
"WITH_APEX=1",
"WITH_APEX_CLOTHING=1",
"WITH_CLOTH_COLLISION_DETECTION=1",
"WITH_PHYSX_COOKING=1",
"WITH_NVCLOTH=1",
"WITH_CUSTOM_SQ_STRUCTURE=0",
"WITH_IMMEDIATE_PHYSX=0",
"GPUPARTICLE_LOCAL_VF_ONLY=0",
"ENGINE_VTABLE=DLLIMPORT_VTABLE",
"ENGINE_API=",
"UE_ENABLE_ICU=1",
"WITH_VS_PERF_PROFILER=0",
"WITH_DIRECTXMATH=0",
"WITH_MALLOC_STOMP=1",
"CORE_VTABLE=DLLIMPORT_VTABLE",
"CORE_API=",
"TRACELOG_VTABLE=DLLIMPORT_VTABLE",
"TRACELOG_API=",
"COREUOBJECT_VTABLE=DLLIMPORT_VTABLE",
"COREUOBJECT_API=",
"NETCORE_VTABLE=DLLIMPORT_VTABLE",
"NETCORE_API=",
"APPLICATIONCORE_VTABLE=DLLIMPORT_VTABLE",
"APPLICATIONCORE_API=",
"RHI_VTABLE=DLLIMPORT_VTABLE",
"RHI_API=",
"JSON_VTABLE=DLLIMPORT_VTABLE",
"JSON_API=",
"WITH_FREETYPE=1",
"SLATECORE_VTABLE=DLLIMPORT_VTABLE",
"SLATECORE_API=",
"INPUTCORE_VTABLE=DLLIMPORT_VTABLE",
"INPUTCORE_API=",
"SLATE_VTABLE=DLLIMPORT_VTABLE",
"SLATE_API=",
"WITH_UNREALPNG=1",
"WITH_UNREALJPEG=1",
"WITH_UNREALEXR=1",
"IMAGEWRAPPER_VTABLE=DLLIMPORT_VTABLE",
"IMAGEWRAPPER_API=",
"MESSAGING_VTABLE=DLLIMPORT_VTABLE",
"MESSAGING_API=",
"MESSAGINGCOMMON_VTABLE=DLLIMPORT_VTABLE",
"MESSAGINGCOMMON_API=",
"RENDERCORE_VTABLE=DLLIMPORT_VTABLE",
"RENDERCORE_API=",
"SOCKETS_PACKAGE=1",
"SOCKETS_VTABLE=DLLIMPORT_VTABLE",
"SOCKETS_API=",
"ASSETREGISTRY_VTABLE=DLLIMPORT_VTABLE",
"ASSETREGISTRY_API=",
"ENGINEMESSAGES_VTABLE=DLLIMPORT_VTABLE",
"ENGINEMESSAGES_API=",
"ENGINESETTINGS_VTABLE=DLLIMPORT_VTABLE",
"ENGINESETTINGS_API=",
"SYNTHBENCHMARK_VTABLE=DLLIMPORT_VTABLE",
"SYNTHBENCHMARK_API=",
"RENDERER_VTABLE=DLLIMPORT_VTABLE",
"RENDERER_API=",
"GAMEPLAYTAGS_VTABLE=DLLIMPORT_VTABLE",
"GAMEPLAYTAGS_API=",
"PACKETHANDLER_VTABLE=DLLIMPORT_VTABLE",
"PACKETHANDLER_API=",
"RELIABILITYHANDLERCOMPONENT_VTABLE=DLLIMPORT_VTABLE",
"RELIABILITYHANDLERCOMPONENT_API=",
"AUDIOPLATFORMCONFIGURATION_VTABLE=DLLIMPORT_VTABLE",
"AUDIOPLATFORMCONFIGURATION_API=",
"MESHDESCRIPTION_VTABLE=DLLIMPORT_VTABLE",
"MESHDESCRIPTION_API=",
"STATICMESHDESCRIPTION_VTABLE=DLLIMPORT_VTABLE",
"STATICMESHDESCRIPTION_API=",
"PAKFILE_VTABLE=DLLIMPORT_VTABLE",
"PAKFILE_API=",
"RSA_VTABLE=DLLIMPORT_VTABLE",
"RSA_API=",
"NETWORKREPLAYSTREAMING_VTABLE=DLLIMPORT_VTABLE",
"NETWORKREPLAYSTREAMING_API=",
"PHYSICSCORE_VTABLE=DLLIMPORT_VTABLE",
"PHYSICSCORE_API=",
"COMPILE_WITHOUT_UNREAL_SUPPORT=0",
"CHAOS_MEMORY_TRACKING=0",
"CHAOS_VTABLE=DLLIMPORT_VTABLE",
"CHAOS_API=",
"CHAOS_CHECKED=0",
"CHAOSCORE_VTABLE=DLLIMPORT_VTABLE",
"CHAOSCORE_API=",
"INTEL_ISPC=1",
"VORONOI_VTABLE=DLLIMPORT_VTABLE",
"VORONOI_API=",
"FIELDSYSTEMCORE_VTABLE=DLLIMPORT_VTABLE",
"FIELDSYSTEMCORE_API=",
"WITH_PHYSX_RELEASE=0",
"UE_PHYSX_SUFFIX=PROFILE",
"UE_APEX_SUFFIX=PROFILE",
"APEX_UE4=1",
"APEX_STATICALLY_LINKED=0",
"WITH_APEX_LEGACY=1",
"SIGNALPROCESSING_VTABLE=DLLIMPORT_VTABLE",
"SIGNALPROCESSING_API=",
"WITH_RECAST=1",
"UNREALED_VTABLE=DLLIMPORT_VTABLE",
"UNREALED_API=",
"BSPMODE_VTABLE=DLLIMPORT_VTABLE",
"BSPMODE_API=",
"DIRECTORYWATCHER_VTABLE=DLLIMPORT_VTABLE",
"DIRECTORYWATCHER_API=",
"DOCUMENTATION_VTABLE=DLLIMPORT_VTABLE",
"DOCUMENTATION_API=",
"LOAD_PLUGINS_FOR_TARGET_PLATFORMS=1",
"PROJECTS_VTABLE=DLLIMPORT_VTABLE",
"PROJECTS_API=",
"SANDBOXFILE_VTABLE=DLLIMPORT_VTABLE",
"SANDBOXFILE_API=",
"EDITORSTYLE_VTABLE=DLLIMPORT_VTABLE",
"EDITORSTYLE_API=",
"SOURCE_CONTROL_WITH_SLATE=1",
"SOURCECONTROL_VTABLE=DLLIMPORT_VTABLE",
"SOURCECONTROL_API=",
"UNREALEDMESSAGES_VTABLE=DLLIMPORT_VTABLE",
"UNREALEDMESSAGES_API=",
"GAMEPLAYDEBUGGER_VTABLE=DLLIMPORT_VTABLE",
"GAMEPLAYDEBUGGER_API=",
"BLUEPRINTGRAPH_VTABLE=DLLIMPORT_VTABLE",
"BLUEPRINTGRAPH_API=",
"EDITORSUBSYSTEM_VTABLE=DLLIMPORT_VTABLE",
"EDITORSUBSYSTEM_API=",
"HTTP_PACKAGE=1",
"CURL_ENABLE_DEBUG_CALLBACK=1",
"CURL_ENABLE_NO_TIMEOUTS_OPTION=1",
"HTTP_VTABLE=DLLIMPORT_VTABLE",
"HTTP_API=",
"UNREALAUDIO_VTABLE=DLLIMPORT_VTABLE",
"UNREALAUDIO_API=",
"FUNCTIONALTESTING_VTABLE=DLLIMPORT_VTABLE",
"FUNCTIONALTESTING_API=",
"AUTOMATIONCONTROLLER_VTABLE=DLLIMPORT_VTABLE",
"AUTOMATIONCONTROLLER_API=",
"LOCALIZATION_VTABLE=DLLIMPORT_VTABLE",
"LOCALIZATION_API=",
"WITH_SNDFILE_IO=1",
"AUDIOEDITOR_VTABLE=DLLIMPORT_VTABLE",
"AUDIOEDITOR_API=",
"AUDIOMIXER_VTABLE=DLLIMPORT_VTABLE",
"AUDIOMIXER_API=",
"TARGETPLATFORM_VTABLE=DLLIMPORT_VTABLE",
"TARGETPLATFORM_API=",
"UELIBSAMPLERATE_VTABLE=DLLIMPORT_VTABLE",
"UELIBSAMPLERATE_API=",
"LEVELEDITOR_VTABLE=DLLIMPORT_VTABLE",
"LEVELEDITOR_API=",
"SETTINGS_VTABLE=DLLIMPORT_VTABLE",
"SETTINGS_API=",
"INTROTUTORIALS_VTABLE=DLLIMPORT_VTABLE",
"INTROTUTORIALS_API=",
"HEADMOUNTEDDISPLAY_VTABLE=DLLIMPORT_VTABLE",
"HEADMOUNTEDDISPLAY_API=",
"VREDITOR_VTABLE=DLLIMPORT_VTABLE",
"VREDITOR_API=",
"COMMONMENUEXTENSIONS_VTABLE=DLLIMPORT_VTABLE",
"COMMONMENUEXTENSIONS_API=",
"LANDSCAPE_VTABLE=DLLIMPORT_VTABLE",
"LANDSCAPE_API=",
"PROPERTYEDITOR_VTABLE=DLLIMPORT_VTABLE",
"PROPERTYEDITOR_API=",
"ACTORPICKERMODE_VTABLE=DLLIMPORT_VTABLE",
"ACTORPICKERMODE_API=",
"SCENEDEPTHPICKERMODE_VTABLE=DLLIMPORT_VTABLE",
"SCENEDEPTHPICKERMODE_API=",
"DETAILCUSTOMIZATIONS_VTABLE=DLLIMPORT_VTABLE",
"DETAILCUSTOMIZATIONS_API=",
"CLASSVIEWER_VTABLE=DLLIMPORT_VTABLE",
"CLASSVIEWER_API=",
"GRAPHEDITOR_VTABLE=DLLIMPORT_VTABLE",
"GRAPHEDITOR_API=",
"STRUCTVIEWER_VTABLE=DLLIMPORT_VTABLE",
"STRUCTVIEWER_API=",
"CONTENTBROWSER_VTABLE=DLLIMPORT_VTABLE",
"CONTENTBROWSER_API=",
"ENABLE_HTTP_FOR_NFS=1",
"NETWORKFILESYSTEM_VTABLE=DLLIMPORT_VTABLE",
"NETWORKFILESYSTEM_API=",
"UMG_VTABLE=DLLIMPORT_VTABLE",
"UMG_API=",
"MOVIESCENE_VTABLE=DLLIMPORT_VTABLE",
"MOVIESCENE_API=",
"TIMEMANAGEMENT_VTABLE=DLLIMPORT_VTABLE",
"TIMEMANAGEMENT_API=",
"MOVIESCENETRACKS_VTABLE=DLLIMPORT_VTABLE",
"MOVIESCENETRACKS_API=",
"ANIMATIONCORE_VTABLE=DLLIMPORT_VTABLE",
"ANIMATIONCORE_API=",
"PROPERTYPATH_VTABLE=DLLIMPORT_VTABLE",
"PROPERTYPATH_API=",
"NAVIGATIONSYSTEM_VTABLE=DLLIMPORT_VTABLE",
"NAVIGATIONSYSTEM_API=",
"MESHDESCRIPTIONOPERATIONS_VTABLE=DLLIMPORT_VTABLE",
"MESHDESCRIPTIONOPERATIONS_API=",
"MESHBUILDER_VTABLE=DLLIMPORT_VTABLE",
"MESHBUILDER_API=",
"MATERIALSHADERQUALITYSETTINGS_VTABLE=DLLIMPORT_VTABLE",
"MATERIALSHADERQUALITYSETTINGS_API=",
"INTERACTIVETOOLSFRAMEWORK_VTABLE=DLLIMPORT_VTABLE",
"INTERACTIVETOOLSFRAMEWORK_API=",
"TOOLMENUSEDITOR_VTABLE=DLLIMPORT_VTABLE",
"TOOLMENUSEDITOR_API=",
"WITH_OGGVORBIS=1",
"XAUDIO2_VTABLE=DLLIMPORT_VTABLE",
"XAUDIO2_API=",
"AUDIOMIXERXAUDIO2_VTABLE=DLLIMPORT_VTABLE",
"AUDIOMIXERXAUDIO2_API=",
"ASSETTAGSEDITOR_VTABLE=DLLIMPORT_VTABLE",
"ASSETTAGSEDITOR_API=",
"COLLECTIONMANAGER_VTABLE=DLLIMPORT_VTABLE",
"COLLECTIONMANAGER_API=",
"ADDCONTENTDIALOG_VTABLE=DLLIMPORT_VTABLE",
"ADDCONTENTDIALOG_API=",
"USE_EMBREE=1",
"MESHUTILITIES_VTABLE=DLLIMPORT_VTABLE",
"MESHUTILITIES_API=",
"MESHMERGEUTILITIES_VTABLE=DLLIMPORT_VTABLE",
"MESHMERGEUTILITIES_API=",
"HIERARCHICALLODUTILITIES_VTABLE=DLLIMPORT_VTABLE",
"HIERARCHICALLODUTILITIES_API=",
"MESHREDUCTIONINTERFACE_VTABLE=DLLIMPORT_VTABLE",
"MESHREDUCTIONINTERFACE_API=",
"ASSETTOOLS_VTABLE=DLLIMPORT_VTABLE",
"ASSETTOOLS_API=",
"KISMETCOMPILER_VTABLE=DLLIMPORT_VTABLE",
"KISMETCOMPILER_API=",
"GAMEPLAYTASKS_VTABLE=DLLIMPORT_VTABLE",
"GAMEPLAYTASKS_API=",
"WITH_GAMEPLAY_DEBUGGER=1",
"AIMODULE_VTABLE=DLLIMPORT_VTABLE",
"AIMODULE_API=",
"KISMET_VTABLE=DLLIMPORT_VTABLE",
"KISMET_API=",
"PHYSICSSQ_VTABLE=DLLIMPORT_VTABLE",
"PHYSICSSQ_API=",
"CHAOSSOLVERS_VTABLE=DLLIMPORT_VTABLE",
"CHAOSSOLVERS_API=",
"GEOMETRYCOLLECTIONCORE_VTABLE=DLLIMPORT_VTABLE",
"GEOMETRYCOLLECTIONCORE_API=",
"GEOMETRYCOLLECTIONSIMULATIONCORE_VTABLE=DLLIMPORT_VTABLE",
"GEOMETRYCOLLECTIONSIMULATIONCORE_API=",
"CLOTHINGSYSTEMRUNTIMEINTERFACE_VTABLE=DLLIMPORT_VTABLE",
"CLOTHINGSYSTEMRUNTIMEINTERFACE_API=",
"AUDIOMIXERCORE_VTABLE=DLLIMPORT_VTABLE",
"AUDIOMIXERCORE_API=",
"UE_PROJECT_NAME=Project",
"PROJECT_VTABLE=DLLEXPORT_VTABLE",
"PROJECT_API="

아래와 같이 잘 추가해주시면 에러가 사라지게 됩니다.

그리고 "defines"의 맨 마지막줄로 가서 아래 3줄을 본인의 프로젝트 명으로 변경하면됩니다. 예를들어 프로젝트 명이 SampleProject 라면 아래와 같이 작성하면 됩니다.

"UE_PROJECT_NAME=SampleProject",
"SAMPLEPROJECT_VTABLE=DLLEXPORT_VTABLE",
"SAMPLEPROJECT_API="

VSCode Extension 설치

이제 프로젝트 세팅은 끝났으니 코드 작성에 필요한 extension만 설치해주면 됩니다.

  • C/C++
  • C#
  • Visual Studio IntelliCode
  • Unreal Engine 4 Snippets
  • vscode-epics
profile
게임을 좋아하는 개발자

1개의 댓글

comment-user-thumbnail
2021년 8월 23일

사랑해요

답글 달기