{"id":4563,"date":"2025-10-13T13:22:30","date_gmt":"2025-10-13T17:22:30","guid":{"rendered":"https:\/\/www.wholetomato.com\/blog\/?p=4563"},"modified":"2025-10-13T15:11:39","modified_gmt":"2025-10-13T19:11:39","slug":"break-free-from-intellisense-hell-with-visual-assist-learn-ue5-c-development-techniques-webinar-recap","status":"publish","type":"post","link":"https:\/\/www.wholetomato.com\/blog\/break-free-from-intellisense-hell-with-visual-assist-learn-ue5-c-development-techniques-webinar-recap\/","title":{"rendered":"Break Free from IntelliSense Hell with Visual Assist: Learn UE5 C++ Development Techniques [Webinar Recap]"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">This is the third session in the webinar series on Unreal Engine 5 workflows with Assembla and Visual Assist. Chris Gardner, lead developer at Whole Tomato Software, challenges conventional wisdom about when to use C++ versus Blueprints and demonstrates how Visual Assist solves critical pain points in Unreal Engine C++ development.<\/span><\/p>\n<p style=\"text-align: center;\"><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/ilAjkzeREng?si=SmfF0t4fwF1DjEyB\" width=\"730\" height=\"400\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">?<\/span><\/iframe><br \/>\n<em>Watch the live demo replay here.<\/em><\/p>\n<p>&nbsp;<\/p>\n<h3><b>The Blueprint vs C++ Debate<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Gardner presents a perspective that surprises many developers: &#8220;Blueprints should be considered the default go-to. They are the bread and butter of your game.&#8221;<\/span><\/p>\n<h4><b>When Blueprints Excel<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Blueprints offer real-time editing without recompilation. &#8220;You can make changes to blueprints and see the change happen in real time,&#8221; Gardner explains. While Unreal has experimented with hot reload, Gardner admits, &#8220;I never got hot reload to work that well.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Visual debugging provides unique advantages. Developers can click entities in the level and inspect their Blueprint behavior directly, something impossible with traditional C++ debuggers.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Several Unreal systems practically require Blueprints:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Animation systems<\/b><span style=\"font-weight: 400;\"> with state machines and blend spaces are &#8220;very poorly exposed in C++,&#8221; according to Gardner<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>AI behavior trees and blackboards<\/b><span style=\"font-weight: 400;\"> lose their editing tools when implemented in C++<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Sequencer assets<\/b><span style=\"font-weight: 400;\"> for cutscenes need Blueprint integration<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>UI development through UMG<\/b><span style=\"font-weight: 400;\"> works best visually rather than in hardcoded C++<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">&#8220;Even if you could do this easily in C++, you wouldn&#8217;t want to because you&#8217;d lose a lot of the value of the editor,&#8221; Gardner emphasizes.<\/span><\/p>\n<h4><b>The Real Problem with Blueprints<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">When asked why anyone uses C++, most developers cite performance. Gardner challenges this: &#8220;I really don&#8217;t think performance is a good reason. Blueprints are fast enough for 99% of things.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The actual problem is complexity management. &#8220;As you add complexity to blueprints, this just explodes. It&#8217;s not twice as worse. It&#8217;s like squared worse.&#8221;<\/span><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?ssl=1\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4570\" data-permalink=\"https:\/\/www.wholetomato.com\/blog\/break-free-from-intellisense-hell-with-visual-assist-learn-ue5-c-development-techniques-webinar-recap\/bp\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?fit=512%2C291&amp;ssl=1\" data-orig-size=\"512,291\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"tangled blueprints in unreal\" data-image-description=\"&lt;p&gt;tangled blueprints in unreal&lt;\/p&gt;\n\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?fit=300%2C171&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?fit=512%2C291&amp;ssl=1\" class=\"alignnone size-full wp-image-4570\" src=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?resize=512%2C291&#038;ssl=1\" alt=\"\" width=\"512\" height=\"291\" srcset=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?w=512&amp;ssl=1 512w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/bp.jpg?resize=360%2C205&amp;ssl=1 360w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Gardner demonstrates a tangled Blueprint graph. &#8220;This is just how code looks when you&#8217;re just making your game. You&#8217;re just slapping things together.&#8221; Even well-organized graphs require constant maintenance. &#8220;Now you have to edit it. All of your beautiful structure is gone and you have to redo it again.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Low information density creates fundamental problems. Gardner shows a simple Blueprint: &#8220;This is like one line of C++ right here. You have to scroll scroll scroll scroll scroll.&#8221;<\/span><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4571\" data-permalink=\"https:\/\/www.wholetomato.com\/blog\/break-free-from-intellisense-hell-with-visual-assist-learn-ue5-c-development-techniques-webinar-recap\/c\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?fit=1510%2C966&amp;ssl=1\" data-orig-size=\"1510,966\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"c++ makes unreal logic compact\" data-image-description=\"&lt;p&gt;Using C++ allows for more density and compact info&lt;\/p&gt;\n\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?fit=300%2C192&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?fit=1024%2C655&amp;ssl=1\" class=\"alignnone size-large wp-image-4571\" src=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?resize=1024%2C655&#038;ssl=1\" alt=\"Using C++ allows for more density and compact info\" width=\"1024\" height=\"655\" srcset=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?resize=1024%2C655&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?resize=300%2C192&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?resize=768%2C491&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?resize=360%2C230&amp;ssl=1 360w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/c.png?w=1510&amp;ssl=1 1510w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">His conclusion: &#8220;The drawback is that blueprints waste your time. This is the same reason we don&#8217;t have programming languages that work like this generally out in the world.&#8221;<\/span><\/p>\n<h3><b>Why C++ Matters<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Gardner contrasts Blueprints with C++ code. &#8220;Look at the density. So much code is happening so quickly. Super dense, super readable, easy to modify.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Beyond density, C++ provides deep debugging. &#8220;Let&#8217;s say there&#8217;s something going on in the base class of your blueprint. Well, you&#8217;re essentially done at that point.&#8221; C++ debugging allows examining the entire engine source. &#8220;You can actually look at what the engine&#8217;s doing with your call and say, &#8216;Here&#8217;s where it&#8217;s failing, and this is why.'&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Gardner adds a point about AI assistance: &#8220;AI can literally hand you code for a lot of this stuff even if you don&#8217;t know that much Unreal Engine C++. AI&#8217;s got your back in a way that it just can&#8217;t with blueprints.&#8221;<\/span><\/p>\n<h4><b>C++ Challenges in Unreal<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Unreal&#8217;s non-standard extensions complicate development. &#8220;You&#8217;re not going to use any of that,&#8221; Gardner tells developers familiar with standard C++. &#8220;Unreal Engine 5 uses its own STL.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Visual Studio struggles with Unreal&#8217;s custom macros and build system. &#8220;Visual Studio honestly struggles. It does struggle with the non-standard extensions to C++.&#8221; The root cause: Unreal has its own compiler pipeline. &#8220;It&#8217;s not really building the solution when you build it. They don&#8217;t have to make the Visual Studio projects sensible to Visual Studio.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Generated files only exist after compilation, causing parsing problems. &#8220;Technically this isn&#8217;t valid C++. This is totally nonsense when interpreted straightforwardly.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The result: &#8220;Failure to navigate and refactor commonly occur. It really is a problem that I&#8217;ve had frequently myself.&#8221;<\/span><\/p>\n<h3><b>The Optimal Workflow: Bottom-Up Development<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Gardner demonstrates the pattern he uses on every project: &#8220;Define base classes in C++ that Blueprints inherit from.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Using Epic&#8217;s Lyra sample, he shows Blueprint inheritance from C++ layers. &#8220;C++ feeds up into blueprints very elegantly.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Even minimal base classes provide value. &#8220;It can have no code at all. That gives you a blank space that you can fill in later.&#8221; When complexity grows, &#8220;you can implement it in C++ and expose it to the blueprint. All of a sudden I have access to it.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Keep the flow unidirectional. &#8220;It&#8217;s best to keep the flow bottom up. C++ flows into blueprints and then blueprints flow into your game.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Gardner&#8217;s recommendation is absolute: &#8220;I have done every single project like this. I don&#8217;t think there really is a strong argument for doing things any other way. I don&#8217;t think you can write a game entirely in C++, and unless it&#8217;s a very simple game, you can&#8217;t write a game with just blueprints.&#8221;<\/span><\/p>\n<h3><b>Visual Assist: Solving Unreal C++ Problems<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Visual Assist addresses Visual Studio&#8217;s limitations through custom parsing. &#8220;We have our own parser that we have maintained over the years. That is an incredibly expensive and time-consuming thing to maintain.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This custom parser enables Unreal-specific support. &#8220;We can modify it to fully understand Unreal Engine syntax, which is what we&#8217;ve done.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Performance comes from parser design. &#8220;Our parser doesn&#8217;t have to be written as a compiler front end. It can be really super fast and skip over issues instead of just breaking.&#8221;<\/span><\/p>\n<h4><b>Key Features<\/b><\/h4>\n<ul>\n<li><b>Unreal-specific understanding<\/b><span style=\"font-weight: 400;\"> handles validation patterns. &#8220;If you renamed pickup, you might not rename pickup_implementation and pickup_validate. Visual Studio will get confused. We understand these relationships.&#8221;<\/span><\/li>\n<li><b>Fast navigation<\/b><span style=\"font-weight: 400;\"> includes goto related for hierarchy exploration and powerful filtering for files and symbols. &#8220;It&#8217;s such a powerful quick and reactive system.&#8221;<\/span><\/li>\n<li><b>Code inspections<\/b><span style=\"font-weight: 400;\"> automatically modernize code. Gardner demonstrates fixing shared pointer constructors, detecting unused code, and identifying outdated patterns. &#8220;We&#8217;ve made sure that every single one of these is something you&#8217;re going to want to do. It&#8217;s not noise.&#8221; <\/span>Batch corrections work across entire files. &#8220;I can select everything. I can apply it. And bam, everything in the file has been improved.&#8221;<em>Protip:<\/em> The primary shortcut is <em>Shift + Alt + Q<\/em> (Quick Actions &amp; Refactorings menu) for context-based commands. &#8220;That&#8217;s an incredibly good way to get started.&#8221; he adds.<\/li>\n<\/ul>\n<h3><b>Common Questions Addressed<\/b><\/h3>\n<ul>\n<li><b>Are Blueprints hard for C++ developers?<\/b><span style=\"font-weight: 400;\"> Yes. &#8220;It&#8217;s hard to know what to use and when. What things get exposed to blueprints can be a little different than C++.&#8221;<\/span><\/li>\n<li><b>Can you mix standard and Unreal STL?<\/b><span style=\"font-weight: 400;\"> Technically yes, but avoid it. &#8220;The Unreal Engine memory management system is not going to understand what&#8217;s going on when you add things to a std vector.&#8221;<\/span><\/li>\n<li><b>How do you start without feeling overwhelmed?<\/b><span style=\"font-weight: 400;\"> &#8220;You just have to get used to being overwhelmed. Start by thinking this is super duper fun. It&#8217;s compartmentalized. You can wait to learn AI systems till you need them.&#8221;<\/span><\/li>\n<\/ul>\n<h3><b>Key Takeaways<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Gardner&#8217;s main point: &#8220;I think a lot of the information out there is wrong. <strong>People think C++ is there for performance. I agree blueprints are fast enough for 99% of things, but that&#8217;s not why you use C++.<\/strong>&#8220;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The actual reason: &#8220;C++ is a powerful method of organizing and writing code. There&#8217;s a reason why we don&#8217;t use this to actually write code,&#8221; pointing to Blueprint graphs. &#8220;Because of this low density and all that.&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Blueprints waste time as complexity increases. &#8220;If you take one thing away: Why C++? Because blueprints don&#8217;t do a good job. As complexity increases, they waste your time.&#8221;<\/span><\/p>\n<h2><b>Conclusion<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Mastering Unreal Engine 5 requires understanding when to leverage C++ versus Blueprints and combining both effectively. Gardner&#8217;s bottom-up workflow\u2014base classes in C++, extensions in Blueprints\u2014provides a scalable foundation that preserves rapid iteration while managing complexity.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This session completes the three-part webinar series. The first session covered project setup and <a href=\"https:\/\/www.wholetomato.com\/blog\/setting-up-your-first-ue5-project-that-wont-break-webinar-recap\/\">Perforce integration with Assembla<\/a>. The second demonstrated <a href=\"https:\/\/www.wholetomato.com\/blog\/beyond-the-basics-setting-up-ue5-source-builds-and-ci-that-works-webinar-recap\/\">advanced source builds and branching strategies<\/a>. This final session addresses the daily development experience: writing, navigating, and maintaining code that runs on that infrastructure.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For teams serious about Unreal Engine 5 development, the combination of proper version control through Assembla and Perforce, well-structured source builds, and enhanced C++ productivity through Visual Assist creates a complete workflow that scales from solo developers to large studios. Visit <a href=\"https:\/\/wholetomato.com\">wholetomato.com<\/a> to learn more about Visual Assist or <a href=\"https:\/\/get.assembla.com\/\">getassembla.com<\/a> for managed Perforce hosting.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the third session in the webinar series on Unreal Engine 5 workflows with Assembla and Visual Assist. Chris Gardner, lead developer at Whole Tomato Software, challenges conventional wisdom about when to use C++&#8230;<\/p>\n","protected":false},"author":213500340,"featured_media":4565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[726359896],"tags":[726360499,2426,726359765,726359791,12004844],"class_list":["post-4563","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-webinar-recap","tag-blueprints","tag-c","tag-game-development","tag-unreal-engine-5","tag-visual-assist"],"jetpack_publicize_connections":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2025\/10\/WT-PPT-Webinar-VISUAL-ASSIST-Assembla-Code-Collaborate.png?fit=1920%2C1080&ssl=1","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfpLS4-1bB","amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/4563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/users\/213500340"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/comments?post=4563"}],"version-history":[{"count":5,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/4563\/revisions"}],"predecessor-version":[{"id":4572,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/4563\/revisions\/4572"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/media\/4565"}],"wp:attachment":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/media?parent=4563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/categories?post=4563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/tags?post=4563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}