Skip to content

Instantly share code, notes, and snippets.

@pShota
Last active May 4, 2024 02:08
Show Gist options
  • Save pShota/439bc7a0dd3c726d1d5750856fb88cd8 to your computer and use it in GitHub Desktop.
Save pShota/439bc7a0dd3c726d1d5750856fb88cd8 to your computer and use it in GitHub Desktop.
Setup Unreal Engine 4.25 with Visual Studio Code

Setup Unreal Engine 4.25 with Visual Studio Code

Normally you would use Visual Studio 2019 with UE4, but VS 2019 is somewhat "heavy",
where Visual Studio Code is a decent alternative. However some fixes are needed before you can use it.

Step 1

First, you need to change Editor to VS Code in Unreal Engine Setting,
after that you press generate VS Code project in UE4 menu.
Modify file .vscode/c_cpp_properties.json from your project folder, it should look like this:

{
    "configurations": [
        {
            "name": "UnrealEngine",
            "includePath": [
                "/Users/Shared/Epic Games/UE_4.25/Engine/Source",
                "/Users/Shared/Epic Games/UE_4.25/Engine/Source/Runtime",
                ..............(a lot of paths)..............
                "/usr/local/include"
            ],
            "intelliSenseMode": "clang-x64",
            "macFrameworkPath": [
                "/System/Library/Frameworks",
                "/Library/Frameworks"
            ],
            "defines":[
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

The problem here is "defines" are missing UE4 define preprocessors(UE4 4.25 bug),
you have to add these lines back.

"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",
            "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=",
            "INCLUDE_CHAOS=0",
            "WITH_PHYSX=1",
            "WITH_CHAOS=0",
            "WITH_CHAOS_NEEDS_TO_BE_FIXED=0",
            "PHYSICS_INTERFACE_LLIMMEDIATE=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=",
            "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=",
            "UTILITYSHADERS_VTABLE=DLLIMPORT_VTABLE",
            "UTILITYSHADERS_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=",
            "PAKFILE_VTABLE=DLLIMPORT_VTABLE",
            "PAKFILE_API=",
            "RSA_VTABLE=DLLIMPORT_VTABLE",
            "RSA_API=",
            "NETWORKREPLAYSTREAMING_VTABLE=DLLIMPORT_VTABLE",
            "NETWORKREPLAYSTREAMING_API=",
            "PHYSICSCORE_VTABLE=DLLIMPORT_VTABLE",
            "PHYSICSCORE_API=",
            "WITH_PHYSX_RELEASE=0",
            "UE_PHYSX_SUFFIX=PROFILE",
            "PHYSICSSQ_VTABLE=DLLIMPORT_VTABLE",
            "PHYSICSSQ_API=",
            "COMPILE_WITHOUT_UNREAL_SUPPORT=0",
            "CHAOSSOLVERS_VTABLE=DLLIMPORT_VTABLE",
            "CHAOSSOLVERS_API=",
            "CHAOS_VTABLE=DLLIMPORT_VTABLE",
            "CHAOS_API=",
            "CHAOSCORE_VTABLE=DLLIMPORT_VTABLE",
            "CHAOSCORE_API=",
            "INTEL_ISPC=1",
            "VORONOI_VTABLE=DLLIMPORT_VTABLE",
            "VORONOI_API=",
            "FIELDSYSTEMCORE_VTABLE=DLLIMPORT_VTABLE",
            "FIELDSYSTEMCORE_API=",
            "GEOMETRYCOLLECTIONCORE_VTABLE=DLLIMPORT_VTABLE",
            "GEOMETRYCOLLECTIONCORE_API=",
            "GEOMETRYCOLLECTIONSIMULATIONCORE_VTABLE=DLLIMPORT_VTABLE",
            "GEOMETRYCOLLECTIONSIMULATIONCORE_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=",
            "GEOMETRYCOLLECTIONENGINE_VTABLE=DLLIMPORT_VTABLE",
            "GEOMETRYCOLLECTIONENGINE_API=",
            "UE_APEX_SUFFIX=PROFILE",
            "APEX_UE4=1",
            "APEX_STATICALLY_LINKED=0",
            "WITH_APEX_LEGACY=1",
            "FIELDSYSTEMENGINE_VTABLE=DLLIMPORT_VTABLE",
            "FIELDSYSTEMENGINE_API=",
            "CHAOSSOLVERENGINE_VTABLE=DLLIMPORT_VTABLE",
            "CHAOSSOLVERENGINE_API=",
            "FIELDSYSTEMSIMULATIONCORE_VTABLE=DLLIMPORT_VTABLE",
            "FIELDSYSTEMSIMULATIONCORE_API=",
            "MESHDESCRIPTIONOPERATIONS_VTABLE=DLLIMPORT_VTABLE",
            "MESHDESCRIPTIONOPERATIONS_API=",
            "MESHBUILDER_VTABLE=DLLIMPORT_VTABLE",
            "MESHBUILDER_API=",
            "MATERIALSHADERQUALITYSETTINGS_VTABLE=DLLIMPORT_VTABLE",
            "MATERIALSHADERQUALITYSETTINGS_API=",
            "WITH_OGGVORBIS=1",
            "XAUDIO2_VTABLE=DLLIMPORT_VTABLE",
            "XAUDIO2_API=",
            "AUDIOMIXERXAUDIO2_VTABLE=DLLIMPORT_VTABLE",
            "AUDIOMIXERXAUDIO2_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=",
            "CLOTHINGSYSTEMRUNTIMEINTERFACE_VTABLE=DLLIMPORT_VTABLE",
            "CLOTHINGSYSTEMRUNTIMEINTERFACE_API=",
            
            "UE_PROJECT_NAME=ProjectName",
            "YOURPROJECTNAME_VTABLE=DLLEXPORT_VTABLE",
            "YOURPROJECTNAME_V2_API=",
        ],

Notice: the last 3 line you should replace YOURPROJECTNAME,
where YOURPROJECTNAME_VTABLE and YOURPROJECTNAME_V2_API should use capital letter,
The value of UE_PROJECT_NAME is case sensitive.


Step 2

you need to add path to "includedPath" as well so that VS Code can pick up "generated.h" header files

"includePath": [
  "/Users/Shared/Epic Games/UE_4.25/Engine/Source",
  "/your project path/Intermediate/Build/Mac/UE4Editor/Inc/projectname",
  "/your project path/Source",
  ....
]

Step 3

Presumably you have installed C/C++ Extension in VS Code,
but that will not work as expected using default setting,
you need to set IntelliSense Engine to "Tag Parser",
you can change this in Extension workspace setting, or modify .vscode/projectname.code-workspace file

"settings": {
    "typescript.tsc.autoDetect": "off",
    "C_Cpp.default.cStandard": "c11",
    "C_Cpp.default.cppStandard": "c++17",
    "C_Cpp.default.intelliSenseMode": "macos-clang-x64",
    "C_Cpp.intelliSenseEngine": "Tag Parser",
    ....

Step 4

You can use cmd/ctrl+shift+b to open unreal build tasks,
but in Mac osx, Android tasks might be missing,
add the tasks back in .vscode/tasks.json as follow:
please replace project path and ProjectName

"tasks": [
  {
    "label": "ProjectName Android Development Build",
    "group": "build",
    "command": "Engine/Build/BatchFiles/Mac/Build.sh",
    "args": [
      "ProjectName",
      "Android",
      "Development",
      "/project path/ProjectName.uproject",
      "-waitmutex"
    ],
    "problemMatcher": "$msCompile",
    "type": "shell",
    "options": {
      "cwd": "/Users/Shared/Epic Games/UE_4.25"
    }
  },
  {
    "label": "ProjectName Android Development Rebuild",
    "group": "build",
    "command": "Engine/Build/BatchFiles/Mac/Build.sh",
    "args": [
      "ProjectName",
      "Android",
      "Development",
      "/project path/ProjectName.uproject",
      "-waitmutex"
    ],
    "problemMatcher": "$msCompile",
    "dependsOn": [
      "ProjectName Android Development Clean"
    ],
    "type": "shell",
    "options": {
      "cwd": "/Users/Shared/Epic Games/UE_4.25"
    }
  },
  {
    "label": "ProjectName Android Development Clean",
    "group": "build",
    "command": "Engine/Build/BatchFiles/Mac/Build.sh",
    "args": [
      "ProjectName",
      "Android",
      "Development",
      "/project path/ProjectName.uproject",
      "-waitmutex",
      "-clean"
    ],
    "problemMatcher": "$msCompile",
    "type": "shell",
    "options": {
      "cwd": "/Users/Shared/Epic Games/UE_4.25"
    }
  },
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment