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.
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.
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",
....
]
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",
....
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"
}
},