{"id":5217,"date":"2023-10-19T22:45:57","date_gmt":"2023-10-19T14:45:57","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=5217"},"modified":"2023-10-19T23:10:31","modified_gmt":"2023-10-19T15:10:31","slug":"unreal-vs-unity","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=5217","title":{"rendered":"Unreal vs Unity"},"content":{"rendered":"\n<p> Let&#8217;s rephrase a fundamental question here. <\/p>\n\n\n\n<p>I&#8217;m considering using Unreal, but many people seem to be using Unity for making indie games. I&#8217;m never planning to go into AAA games, I only want to make indie games as a solo developer (maybe in a small team). Is Unreal the right choice for me? Does Unreal have significant disadvantages compared to Unity for an indie dev or a small team? Is it slower\/harder to make prototypes and small indie games in Unreal? Why do so many people use Unity instead?<\/p>\n\n\n\n<p>This is just a short summary which should give you some basic overview, so you would know better what to look at. It aims to clarify some doubts and myths.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"unity-is-great-for-2d-games-mobile-games\">Unity is great for 2D games, mobile games<\/h2>\n\n\n\n<ul><li>Unity shines at mobile development, lightweight on phones. Small engine footprint, now it&#8217;s even possible to embed the Unity app in another app.<\/li><li>Unity now supports every mobile monetization method possible (ads, in-app purchase) &#8211; they focused for years on it.<\/li><li>Unity is much better for 2D games. Unreal support is very limited, it only has the Paper2D plugin. Yes, a single plugin and nothing in the engine is designed with 2D in mind. Even the orthographic camera doesn&#8217;t fully work with Unreal&#8217;s lightning. Meanwhile, Unity provides a lot: 2D lightning, animation tools, sprites, tilemaps. Read more about&nbsp;<a href=\"https:\/\/unity.com\/unity\/features\/2dtools\">the evolution of 2D tools<\/a>&nbsp;in Unity.<\/li><li>Lightweight mobile games are a major reason why there are more Unity games published than Unreal ones. There are over&nbsp;<a href=\"https:\/\/www.pocketgamer.biz\/metrics\/app-store\/?mpage=submission\">4 million apps on App Store<\/a>&nbsp;alone.<\/li><li>Unity is all about being &#8220;simple, easy to start and universal&#8221;.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"unreal-engine-is-designed-for-small-teams\">Unreal Engine is designed for small teams<\/h2>\n\n\n\n<p>This is the myth that Unreal Engine is meant for large studios. It&#8217;s essential to debunk it here.<\/p>\n\n\n\n<p>Unreal Engine was designed with indie teams in mind as Epic already filled the &#8220;AAA studio niche&#8221; as it was possible at a time. That&#8217;s why we have blueprints, visual scripting and dozens of tools working with each other out of the box. Especially if somebody is working on a game where gameplay uses characters or heavily-directed content (implementing and scripting small things in every place of the game instead of relying on programmer every day).<\/p>\n\n\n\n<p>Unreal rendering focuses on&nbsp;<a href=\"https:\/\/www.wikiwand.com\/en\/Physically_based_rendering\">physically based rendering<\/a>&nbsp;and perspective camera. Making stylized games is still possible, there are dozens of small stylized games done in Unreal. You can make a racing game or a spacecraft simulation game, the engine doesn&#8217;t focus on FPS games (it&#8217;s not Unreal Engine 1, 2, or 3).<\/p>\n\n\n\n<p>It comes with a lot of tools out of the box for handling characters, skeletal animations (not limited to humanoids), rendering things such as hair, fur and eye shaders. It&#8217;s extremely indie-friendly in this regard.<\/p>\n\n\n\n<p>Furthermore, it&#8217;s already a tradition that Epic promotes stunning indie games developed with UE at major showcase events<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/events\/inside-xbox-event-reveals-wave-of-new-unreal-engine-powered-games\">Inside Xbox event reveals wave of new Unreal Engine-powered games<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/blog\/unreal-engine-developers-shine-at-playstation-5-showcase\">Unreal Engine developers shine at PlayStation 5 showcase<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/blog\/over-a-dozen-unreal-engine-powered-games-featured-during-xbox-games-showcase\">Over a dozen Unreal Engine-powered games featured during Xbox Games Showcase<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/blog\/over-80-unreal-engine-games-highlighted-during-recent-summer-events\">Over 80 Unreal Engine games highlighted during recent summer events<\/a><\/li><\/ul>\n\n\n\n<p>Check out examples of solo devs and small studios utilizing the engine:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/solo-dev-gwen-frey-explains-how-she-developed-puzzle-game-kine-using-only-blueprints\">Solo dev Gwen Frey explains how she developed puzzle game Kine using only Blueprints<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/solo-dev-creates-breathtaking-2d-puzzler-koral-with-the-help-of-the-ue4-marketplace\">Solo dev creates breathtaking 2D puzzler Koral with the help of the Unreal Engine Marketplace<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/solo-developed-polter-pals-uses-sharp-level-design-to-craft-a-hauntingly-memorable-puzzle-game\">Solo-developed Polter Pals uses sharp level design to craft a hauntingly memorable puzzle game<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/spotlights\/octopath-traveler-s-hd-2d-art-style-and-story-make-for-a-jrpg-dream-come-true\">Octopath Traveler\u2019s \u201cHD-2D\u201d art style and story make for a JRPG dream come true<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/how-tetris-effect-became-a-modern-work-of-art\">How Tetris Effect became a modern work of art<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/developer-eggnut-highlights-how-they-created-backbone-s-dystopian-noir-2-5d-pixel-art-style\">Developer EggNut highlights how they created Backbone&#8217;s dystopian noir 2.5D pixel art style<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/creating-the-beautifully-inventive-art-of-creature-in-the-well\">Creating the beautifully inventive art of Creature in the Well<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/the-path-of-calydra-combines-adventure-and-childlike-whimsy-to-create-a-fantastical-journey\">The Path of Calydra combines adventure and childlike whimsy to create a fantastical journey<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/spotlights\/mixing-atmosphere-and-tension-in-the-sci-fi-horror-moons-of-madness\">Mixing atmosphere and tension in the sci-fi horror Moons of Madness<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/tech-blog\/ore-creative-explains-how-to-leverage-editor-utility-widgets-to-stylize-your-game\">Ore Creative explains how to leverage Editor Utility Widgets to stylize your game<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/tech-blog\/balinese-temple-telling-a-powerful-story-through-ue4-environments\">Balinese Temple: Telling a powerful story through Unreal Engine environments<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/tech-blog\/sumo-digital-shares-how-it-created-spyder-s-sophisticated-animation-systems\">Sumo Digital shares how it created Spyder\u2019s sophisticated animation systems<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/with-top-notch-visuals-and-design-lies-beneath-pushes-the-boundaries-of-the-oculus-quest\">With top-notch visuals and design, Lies Beneath pushes the boundaries of the Oculus Quest<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/inventive-combat-in-granblue-fantasy-versus-combines-accessibility-with-new-layers-of-depth\">Inventive combat in &#8216;Granblue Fantasy: Versus&#8217; combines accessibility with new layers of depth<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/spotlights\/how-a-small-team-at-mojang-studios-made-minecraft-dungeons-in-unreal-engine\">How a small team at Mojang Studios made Minecraft Dungeons in Unreal Engine<\/a><\/li><\/ul>\n\n\n\n<p>And the engine scales well from relatively small projects to AAA studios heavily modifying the renderer.<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/tech-blog\/valorant-s-foundation-is-unreal-engine\">VALORANT\u2019s foundation is Unreal Engine<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/how-square-enix-leveraged-unreal-engine-to-modernize-final-fantasy-vii-remake\">How Square Enix leveraged Unreal Engine to modernize FINAL FANTASY VII REMAKE<\/a><\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/developer-interviews\/gears-tactics-uses-the-gears-formula-brilliantly-to-offer-a-fresh-tactical-experience\">Gears Tactics uses the Gears formula brilliantly to offer a fresh tactical experience<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-much-do-the-engines-cost\">How much do the engines cost?<\/h2>\n\n\n\n<ul><li>Unreal Engine is now free to use. And you don&#8217;t pay anything until you reach the first $1 million game revenue! Check&nbsp;<a href=\"https:\/\/www.unrealengine.com\/en-US\/faq\">FAQ<\/a>&nbsp;with links to licensing terms.<\/li><li>Unity&#8217;s personal license is free, but it comes with some limitations. Check their&nbsp;<a href=\"https:\/\/store.unity.com\/\">plans and pricing<\/a>.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tools--learning-curve\">Tools &amp; learning curve<\/h2>\n\n\n\n<ul><li>Unity&#8217;s easier to start with. It&#8217;s much simpler, has fewer systems and features than Unreal Engine and it&#8217;s easier to comprehend. Although it&#8217;s not easier for non-programmers who want to script anything, it doesn&#8217;t come with visual scripting out of the box.<\/li><li>There&#8217;s less learning of Unity since this engine doesn&#8217;t provide reach gameplay framework out of the box. The built-in Unreal gameplay framework is commonly used to create games focusing on characters. First-person perspective, third-person view, but also top-down. It simply comes with character movement, character-oriented camera manager, advanced animation system.<\/li><li>This previous point doesn&#8217;t matter much if your game doesn&#8217;t utilize 3D characters. Or you prefer to establish your own gameplay framework from scratch &#8211; &#8220;make the engine your own&#8221;.<\/li><li>The issue can arise in Unity if you&#8217;d like to do implement a complex game. It&#8217;s often harder with Unity if working solo or in a small team. Keep in mind, we&#8217;re not talking about &#8220;AAA complexity level&#8221; &#8211; such a division doesn&#8217;t truly exist. There are no &#8220;indie features&#8221; or &#8220;AAA features&#8221;. Every project uses a different set of features. You might not need 90% of Unreal&#8217;s features, but you might need all the complexity and flexibility of a single system, i.e. Sequencer &#8211; saving a lot of time and effort while working on animating things in your world.<\/li><li>Unreal provides AAA tools for many domains out of the box. It&#8217;s relatively easy to work with PBR-based tools and achieve &#8220;AAA indie&#8221; quality. The engine comes with visual scripting and many similar node-based editors. The list of tools and features provided with the vanilla engine is really long&#8230;<\/li><li>Skeletal animation system is extensive and provides a lot of tools to non-programmers. Working with animation is sweet, i.e. Unreal is the common choice for fighting\/action games. A new Control Rig system allows for procedural authoring animation just in the engine; also possible to keyframe animation through Sequencer and bake the result to animation asset. Learn how to create a&nbsp;<a href=\"https:\/\/www.unrealengine.com\/en-US\/tech-blog\/learn-how-to-create-a-character-animation-rig-with-unreal-engine-s-new-control-rig-mannequin-sample\">character animation rig with Control Rig Mannequin sample<\/a>.<\/li><li>There are no &#8220;must-have&#8221; plugins for Unreal Engine to get from its marketplace. Engine plugins serve as workflow improvements or providing features for a specific type of project.<\/li><li>It makes Unreal Engine very friendly for artists and designers. The engine philosophy is to provide all the standard tools out of the box. That&#8217;s why it&#8217;s so huge piece of software and it can be intimidating for beginners. You don&#8217;t need to learn everything, just learn what you need for a given game. And you don&#8217;t need to be a programmer to start since you got node-based editors everywhere in the engine.<\/li><li><a href=\"https:\/\/www.unrealengine.com\/en-US\/blog\/a-first-look-at-unreal-engine-5\">Unreal Engine 5<\/a>&nbsp;promises to bring huge workflow updates to 3D artists. No more retopology of meshes, creating a low-poly version, generating LODs and baking normal maps.<\/li><li>Having so many systems and tools out of the box, sometimes you might feel forced to do things in the &#8220;Unreal way&#8221;. That&#8217;s sometimes some issue for developers\/projects working on unconventional projects, or when doing things the way an Epic engineer designed them happens to be confusing.<\/li><li>Now, Unity is in process of adding fundamental tools to the vanilla engine, i.e. visual shader editor, input management. That&#8217;s why the Asset Store was so vital for Unity through years as the engine was missing so many things. Still, there&#8217;s no visual scripting &#8211;&nbsp;<a href=\"https:\/\/ludiq.io\/blog\/unity-acquires-bolt\">Unity acquired Bolt<\/a>&nbsp;as a temporary solution, but their native solution isn&#8217;t ready yet.<\/li><li>Unity&#8217;s strength is flexibility in customizing rendering, how the render passes are arranged. It&#8217;s improved with new&nbsp;<a href=\"https:\/\/docs.unity3d.com\/Manual\/ScriptableRenderPipeline.html\">Scriptable Rendering Pipelines<\/a>&nbsp;&#8211; High Definition Render Pipeline and Universal Render Pipeline. This is much harder with UE, it&#8217;s required to dive into C++ and modification of the engine code.<\/li><li>Nobody uses Unity&#8217;s networking (they are working on a brand-new solution), relying on third-party solutions. Meanwhile, Unreal comes with the excellent multiplayer support out of the box. Unreal&#8217;s gameplay framework is built with networking in mind.&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/en-US\/Gameplay\/GameplayAbilitySystem\/index.html\">Gameplay Ability system<\/a>&nbsp;is a specialized plugin preventing you from reinventing the wheel while building multiplayer mechanics.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"programming\">Programming<\/h2>\n\n\n\n<p>Unity is friendly for programmers.<\/p>\n\n\n\n<ul><li>C\\# is easier to learn than C++, it feels mostly like a general-purpose scripting language in Unity.<\/li><li>If you don&#8217;t get basics of programming yet, it might be very efficient to start learning programming for video games from Unity with C#. It would smoothly introduce you to coding and teach basic concepts. This might be recommended even if you plan to work with Unreal later &#8211; much easier to grasp Unreal C++ after that. And you would understand what you&#8217;re doing in blueprints &#8211; sadly, official docs and many popular YouTube tutorials on blueprints don&#8217;t explain programming concepts, so your blueprint code quickly gets messy.<\/li><li>Visual Studio works nicely with C# while editing C++ can be very cumbersome without proper plugins (more below).<\/li><li>Both engines support Visual Studio Code, although that&#8217;s rarely used for bigger games. In many ways, it&#8217;s a supercharged Notepad.<\/li><li>Rider IDE has supported Unity and C# for some time. Support for Unreal is coming, we have&nbsp;<a href=\"https:\/\/www.jetbrains.com\/lp\/rider-unreal\/\">a Preview<\/a>&nbsp;for now.<\/li><\/ul>\n\n\n\n<p>People are often scared of learning C++ in Unreal Engine. It comes from the fact that pure C++ requires a lot of low-level knowledge, assembling your toolchain. The thing is, you don&#8217;t use pure C++ with Unreal ENgine, the same way you don&#8217;t use pure C# with Unity. Thanks to that, writing C++ code for Unreal ENgine is much, much easier than regular C++. Actually, it&#8217;s more similar to Unity&#8217;s C#.<\/p>\n\n\n\n<ul><li>Epic built a multiplatform C++ library, tailored for game development. This is the engine&#8217;s core. Something we often simply call &#8220;Unreal C++&#8221;.<\/li><li>It provides low-level mechanisms (<a href=\"https:\/\/www.unrealengine.com\/en-US\/blog\/unreal-property-system-reflection\">reflection<\/a>,&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/en-US\/Programming\/UnrealArchitecture\/Objects\/Optimizations\/index.html\">object handling<\/a>&nbsp;with garbage collection) working under the hood. It brings the C++ environment closer to C# or scripting languages.<\/li><li>Unreal C++ provides its own libraries supporting math, vectors, strings (with support for&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/en-US\/Gameplay\/Localization\/Formatting\/index.html\">text localization<\/a>) and many other standard things. Just to make development easier, preventing game programmers from writing his own libraries for every single game.<\/li><li>Writing code is simplified, thanks to dozens of built-in classes, functions and property specifiers, as well as macros and many utilities.<\/li><\/ul>\n\n\n\n<p>Be warned, Unreal C++ environment doesn&#8217;t provide a perfect way to compile the project without ever closing the editor.<\/p>\n\n\n\n<ul><li>There&#8217;s a mechanism called Hot Reload (triggered by a huge button in the editor toolbar) which allows rebuilding C++ code even if you changed code in the C++ header (.h file) or even added new classes. Unfortunately, it causes occasional data loss (apparently 4.26 will fix this issue,&nbsp;<a href=\"https:\/\/issues.unrealengine.com\/issue\/UE-52220\">UE-52220<\/a>).<\/li><li>However, Epic&nbsp;<a href=\"https:\/\/twitter.com\/unrealengine\/status\/1113839325828001792?lang=en\">integrated Live++ to all developers since 4.22<\/a>&nbsp;&#8211; it allows you to safely recompile changes in .cpp files. It&#8217;s quick and 100% stable. Even if the game is running\\! Super sweet, although limited only to .cpp files. It won&#8217;t work with changes made to .h files.<\/li><\/ul>\n\n\n\n<p>If someone wants to be a programmer, shouldn&#8217;t be much difference for them, C# or C++. Albeit learning curve for Unreal C++ is steep, partially because the official docs don&#8217;t explain programming\/C++ concepts &#8211; assuming everybody is a programmer already&#8230;<\/p>\n\n\n\n<p>It&#8217;s very important to begin a journey into the land of Unreal C++ with proper tools. C++ is punishing those who try to approach with bare hands.<\/p>\n\n\n\n<ul><li>It&#8217;s very important to use plugins like&nbsp;<a href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/\">Resharper C++<\/a>&nbsp;with Visual Studio. It&#8217;s not the fault of Unreal, Visual Studio tools don&#8217;t handle C++ well. Especially large codebases like game engines. It&#8217;s standard for a C++ programmer to not rely on Intellisense tool provided with Visual Studio. Read more on efficient&nbsp;<a href=\"https:\/\/unrealcommunity.wiki\/Setting%20up%20Visual%20Studio%20for%20Unreal%20Engine\">Setting up Visual Studio for Unreal Engine<\/a>.<\/li><li>For those looking for an even better tool than Visual Studio,&nbsp;<a href=\"https:\/\/www.jetbrains.com\/lp\/rider-unreal\/\">Rider for Unreal Engine<\/a>&nbsp;is coming. And its preview is already praised by many programmers. There won&#8217;t be a free version, however.<\/li><li>One of the most annoying things that remain in Unreal C++ are compiler\/linker error messages which aren&#8217;t very clear, especially for beginners. Using tools like Resharper++ helps tremendously, it does properly highlight a lot of simple issues. Still, if you are stuck at something, try asking questions online. Communities like&nbsp;<a href=\"https:\/\/unrealsource.com\/\">Unreal Source<\/a>&nbsp;are an amazing help. Just don&#8217;t expect them to read your mind, explain your issue properly.<\/li><\/ul>\n\n\n\n<p>In theory, you could live without things below &#8211; especially if you&#8217;ve got only a single programmer in the team. However, this is essential for efficient work.<\/p>\n\n\n\n<ul><li>Unreal Engine source code is available publicly, free of charge. You can download source code and debugging symbols through Epic Games Launcher. The engine stops being a black box, you can truly understand how it works. It&#8217;s not unusual to copy-paste a small portion of engine code, often to quickly set up your own editor tool.<\/li><li>Set up some kind of &#8220;build system&#8221; if your team consists of 2+ programmers &#8211; you need to compile C++ and then open the editor, no magical compilation in the editor like in Unity. It&#8217;s nothing difficult, it&#8217;s great for non-programmers to obtain compiled binaries from the repository. And it makes it easier to take advantage of the next sweet thing&#8230;<\/li><li>It&#8217;s totally optional, but it&#8217;s also common for Unreal teams. Ignoring the pre-compiled engine available through the Epic Games Launcher and compiling the engine from source. We call it a &#8220;source build&#8221;. After that, you can easily alter small things in the engine &#8211; fix critical bugs, expose hidden things to the project, improve your tools and workflows.<\/li><\/ul>\n\n\n\n<p>Go ahead, check&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/en-US\/Programming\/Introduction\/index.html\">Introduction to Unreal C++<\/a>&nbsp;in the official documentation \ud83d\ude42<\/p>\n\n\n\n<p>PS: Epic&nbsp;<a href=\"https:\/\/venturebeat.com\/2019\/01\/23\/epic-games-buys-scripting-tool-maker-agog-labs-for-unreal-engine-4\/\">purchased the company behind SkookumScript<\/a>&nbsp;for a reason. This is a speculation, but they might come up with a custom scripting language designed to fill a gap between blueprints and C++. And that would serve us much better than just stitching another general-purpose language to the engine.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"stability-of-technology\">Stability of technology<\/h2>\n\n\n\n<ul><li>Unity&#8217;s company doesn&#8217;t create its own games. You can feel it this engine isn&#8217;t used daily by the internal team working on complex games. Meanwhile, Epic dog foods every single system. Either with Fortnite &#8211; systems and editor tools tested game played by hundreds of millions of people on every major platform. If Fortnite doesn&#8217;t use specific systems, they build an extensive demo or small game (i.e. Robo Recall for VR). And this might the most important thing, Unreal tools are proven and often simply work. Even if marked as &#8220;beta&#8221;.<\/li><li>It&#8217;s important to note that many Unity developers recommend using LTS (Long Term Support) releases of the engine for production. Instead of so-called &#8220;tech releases&#8221;, which are introduced a lot of changes, new systems and tools &#8211; but often quite unstable for use in development.<\/li><li>Unity does usually create a promotional movie and doesn&#8217;t even release it as a project &#8211; it&#8217;s confirmed that some demos used renderer features that weren&#8217;t implemented in the engine afterward. For these reasons, we haven&#8217;t ever seen a game that looks as good as Unity&#8217;s internal demos. This is a weird strategy.<\/li><li>A lot of indie studios switch from Unity to Unreal Engine for the next project because Unity wasn&#8217;t enough for more ambitious projects: more content, higher visual fidelity, more power for non-programmers, easier prototyping. A notable example would be&nbsp;<a href=\"https:\/\/twitter.com\/BrianFargo\/status\/1262855710859116544\">InXile switching to Unreal for the next RPG after Wastelands 3<\/a>.<\/li><li>Unity is in the process of upgrading the entire engine for bigger projects and teams, but this is an enormous undertaking&#8230; It&#8217;s basically &#8220;Unity 2nd generation&#8221;, but changes are integrated into current Unity. It means the engine goes through huge architectural changes and some studios decide Unity is too unstable to develop 3D games for now. This is&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/Unity3D\/comments\/gogc4c\/what_unity_is_getting_wrong\/\">a Reddit discussion<\/a>&nbsp;under the opinion of Rust creator on the current state of Unity.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"unreal-editor-requires-a-better-hardware\">Unreal editor requires a better hardware<\/h2>\n\n\n\n<ul><li>The Unity editor has low hardware requirements, but it won&#8217;t run much faster on beefy hardware. It&#8217;s great to make small games on a laptop, bring it to co-worker space or anywhere. Not so great for projects with a lot of code and assets, Unity won&#8217;t scale that well.<\/li><li>Unreal Engine requires more powerful hardware as it targets 3D games. It might get expensive if you&#8217;re about developing the hi-end 3D game on a laptop. Check the article on&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/5.3\/en-US\/hardware-and-software-specifications-for-unreal-engine\/\">Recommended Hardware<\/a>&nbsp;for Unreal. In return, the engine handles asset-heavy projects way better than Unity. As an engine targeting AAA since the beginning of time &#8211; it&#8217;s optimized for crunching gigabytes of content. The engine fully utilizes even a 128 thread CPU for things like code compilation, shader compilation and cooking games. Now Epic is in the process of upgrading the engine for open worlds, that already brings performance and workflow benefits for smaller teams.<\/li><li>It&#8217;s a huge productivity boost to use two screens with Unreal editor. It wasn&#8217;t optimized to use on a single screen with resolution lower than Full HD.<\/li><\/ul>\n\n\n\n<!--nextpage-->\n\n\n\n<p>It seems that&nbsp;<a href=\"https:\/\/www.pcgamer.com\/unity-is-merging-with-a-company-who-made-a-malware-installer\/\">recent<\/a>&nbsp;<a href=\"https:\/\/kotaku.com\/unity-john-riccitiello-monetization-mobile-ironsource-1849179898\">news<\/a>&nbsp;<a href=\"https:\/\/blog.unity.com\/news\/plan-pricing-and-packaging-updates\">has<\/a>&nbsp;caused another wave of people leaving Unity for Unreal or at least considering a switch and checking things out \u201con the other side\u201d to see if it\u2019s worth losing access to all those assets bought over the years. If you\u2019re reading this, chances are you\u2019re one of these people. \ud83d\ude42<\/p>\n\n\n\n<p>As someone who had to make a similar call a few years ago, I can say that even accounting for the months \u201clost\u201d on porting and having to learn new tools, it was still worth it. (Obviously the project was not near shipping, YMMV.)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"ue4-or-ue5\">UE4 or UE5?<\/h1>\n\n\n\n<p>As of writing, 5.3 is the latest stable version. There is no TECH\/LTS split in Unreal. Versions with \u201cpreview\u201d in their names are just that, betas, anything else numbered is stable (generally, more stable than a Unity LTS version, and you can apply your own fixes on top of the engine\u2019s source if needed).<\/p>\n\n\n\n<p>The system requirements for UE4 and UE5 are the same, but UE5 defaults to higher fidelity settings out of the box. If you find that a sandbox project is \u201crunning slower\u201d than you\u2019re used to, that\u2019s because of this and not due to an innate disadvantage of 5. You can change your project settings to match how a UE4 project would behave (or open a UE4 project) to get similar performance characteristics.<\/p>\n\n\n\n<p>UE5\u2019s high-end rendering features such as Nanite and Lumen have a relatively large setup or resolution-based cost, but they scale extremely well, so performance on a sandbox scene is not really relevant.<\/p>\n\n\n\n<p>With earlier versions, there were a few situations (mostly mobile and VR) where UE4 was still an obvious winner, but as time goes on, its advantage is eroding.<\/p>\n\n\n\n<p>For mobile specifically, UE4\u2019s API and runtime support has stagnated, and you\u2019ll probably need to use a custom engine build of&nbsp;<code>4.27-plus<\/code>&nbsp;to get accepted in the two big app stores. On the other hand, UE5 does not support 32-bit targets.<\/p>\n\n\n\n<p>VR has also been making steady progress; if you\u2019re not shipping right away, chances are all the remaining issues will have been fixed by the time you ship. Shipping for Quest is where one might consider sticking with UE4 for the time being.<\/p>\n\n\n\n<p>Unless you want to commit to the 4.27+ branch for your entire project, I would strongly recommend starting on the latest UE5 version right away to avoid generating extra porting work.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"development\">Development<\/h1>\n\n\n\n<p>Unity has a very programmer-centric development style compared to Unreal, with Bolt being a relatively recent addition to the engine. Even designers often deal with C# code and everything revolves around&nbsp;<code>MonoBehaviour<\/code>s one way or another.<\/p>\n\n\n\n<p>Unreal is not just more artist-focused, but the entire architecture is different in a way that I don\u2019t think the&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/4.27\/en-US\/Basics\/UnrealEngineForUnityDevs\/\">official documentation<\/a>&nbsp;explains well enough. Definitely read that page, but then please come back here and let me tell you about the things that took me some time to realize. \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"game-code\">Game code<\/h2>\n\n\n\n<p>In Unity, you write scripts and attach them to&nbsp;<code>GameObject<\/code>s that don\u2019t really do anything by themselves, all functionality comes from components. There is also a very clean line drawn between \u201cyour code\u201d and \u201cengine code\u201d.<\/p>\n\n\n\n<p>In Unreal, your C++ code is on equal footing with the engine, you\u2019re extending the architecture itself with your game-specific classes. Start&nbsp;<strong>un<\/strong>learning to make everything a component and organize your code in classes that make sense in your game world. Don\u2019t try and cross-reference components across different actors, that\u2019s rare to do in Unreal. You can directly have logic in your actors unlike in Unity, use them directly.<\/p>\n\n\n\n<p>Because your C++ is going directly into the engine, the way you compile code is also different. Normally you leave Unity running, change some C#, reload the script runtime, and test your changes. Unreal should be treated more like as if you were writing a command-line program: you\u2019re working on the engine itself instead of being limited to a sandbox. The sandbox is BP and it provides a similar rapid iteration workflow.<\/p>\n\n\n\n<p>There are QoL tools that attempt to do some form of hot reloading, one of which is&nbsp;<a href=\"https:\/\/horugame.com\/dont-use-hot-reload-in-ue4\">broken<\/a>, and the&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/5.3\/en-US\/using-live-coding-to-recompile-unreal-engine-applications-at-runtime\/\">other one<\/a>&nbsp;is unstable. Feel free to use Live Coding, but you\u2019ll need some time to get used to working with this style of development\u2013you\u2019ll get some number of successful reloads (anywhere from 0 to many) before you need to ultimately close the Unreal Editor, compile your code \u201ccleanly\u201d, and start again. This does not mean a full rebuild, but the only 100% reliable compilation method is building your C++ code with the editor&nbsp;<strong>closed<\/strong>,&nbsp;<strong>then<\/strong>&nbsp;starting it anew.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"getting-started\">Getting started<\/h3>\n\n\n\n<p>If you don\u2019t already know C++, these are good resources for learning it:<br><a href=\"https:\/\/stackoverflow.com\/questions\/388242\/the-definitive-c-book-guide-and-list\">https:\/\/stackoverflow.com\/questions\/388242\/the-definitive-c-book-guide-and-list<\/a><br><a href=\"https:\/\/www.learncpp.com\/\">https:\/\/www.learncpp.com<\/a><br><\/p>\n\n\n\n<p>If you do, I wrote&nbsp;<a href=\"https:\/\/landelare.github.io\/2023\/01\/07\/cpp-speedrun.html\">an article<\/a>&nbsp;to bring you up to speed.<\/p>\n\n\n\n<p>This (underwhelmingly-titled) course from Epic will introduce you to the various&nbsp;<code>USOMETHING<\/code>&nbsp;macros that you\u2019re expected to use:<br><a href=\"https:\/\/dev.epicgames.com\/community\/learning\/courses\/KJ\/converting-blueprint-to-c\/\">https:\/\/dev.epicgames.com\/community\/learning\/courses\/KJ\/converting-blueprint-to-c\/<\/a><\/p>\n\n\n\n<p>In your first month or two, I\u2019d also recommend keeping&nbsp;<a href=\"https:\/\/tackytortoise.github.io\/2022\/06\/24\/common-slacker-issues.html\">https:\/\/tackytortoise.github.io\/2022\/06\/24\/common-slacker-issues.html<\/a>&nbsp;on speed dial.<\/p>\n\n\n\n<p>Using ReSharper or Rider is also highly recommended, getting autocomplete for the magic macros is very nice as a beginner. Visual Assist used to be another solid choice for Unreal development.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c-vs-blueprints\">C++ \u201cvs\u201d Blueprints<\/h2>\n\n\n\n<p>Most people with a Unity mindset think of this as a choice that has to be made, and default to C++ as the&nbsp;<em>obvious<\/em>&nbsp;choice. That\u2019s a mistake, the correct choice is&nbsp;<strong>both<\/strong>.<\/p>\n\n\n\n<p>BP is not just the node graph programming language, it\u2019s a collection of systems built on the reflection system that also deals with saving values on your actors (\u201cprefabs\u201d), upgrading components in derived classes, serializing data (\u201cScriptableObjects\u201d), etc.<\/p>\n\n\n\n<p>I found it useful to default to making actor classes in pairs\u2013immediately create a BP subclass for your C++ class and only ever use the BP one. Empty classes are virtually free and you\u2019ll have them ready to go when you need to add something in either language. The situation becomes a little more complicated with subsystems. If you find yourself thinking of using constructor helpers (don\u2019t!) and there\u2019s no obvious BP escape route, look into&nbsp;<code>UDeveloperSettings<\/code>.<\/p>\n\n\n\n<p>Other than this, BP is great for anything that involves logic running across multiple frames (their name for async stuff is \u201clatent\u201d, nodes with a ? icon). I\u2019m&nbsp;<del>shamelessly promoting<\/del>&nbsp;developing a plugin that adds&nbsp;coroutines&nbsp;to UE5 (see the top of this page), but BP remains the only officially-supported way that doesn\u2019t involve callback hell. Timeline nodes are very convenient for interpolation and quick one-off animations. You can easily run them by calling a custom&nbsp;<code>BlueprintImplementableEvent<\/code>&nbsp;from C++.<\/p>\n\n\n\n<p>I won\u2019t attempt to suggest a \u201ccorrect\u201d balance of BP and C++ because it depends on team skills and preferences. Being C++ heavy, BP heavy, or a mix closer to half-and-half all have their individual benefits and drawbacks. 100% of either is a Very Bad Idea\u2122.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"overall-engine-feel\">Overall engine \u201cfeel\u201d<\/h1>\n\n\n\n<p>Let\u2019s face it, C# is amazing and a serious benefit of Unity compared to Unreal. However, you have to use Unity for that, which is becoming more and more of an issue. This is the part where Unreal shines and makes it worth tolerating C++ and BP.<\/p>\n\n\n\n<p>A&nbsp;<strong>lot<\/strong>&nbsp;of things that you would buy Unity assets for or develop yourself are just\u2026 there already. Very often you need but to click a checkbox. Especially when you\u2019re new, it\u2019s worth spending \u224810 minutes trying to find an engine implementation of whatever you\u2019re trying to do, because it will usually be there. (And, you have full source code access as standard!)<\/p>\n\n\n\n<p>There is no messing around with packages and their incompatibilities. There is no SRP fragmentation hell (there is an alternative forward-rendering pipeline which is compatible with the deferred one if you don\u2019t access the GBuffer). A character controller (both manual and AI) comes out of the box. It\u2019s a built-in class, which is great because virtually every marketplace asset will support it. There is multiplayer support. There are obviously the shiny new features such as Nanite and Lumen. There is an entire generic gameplay ability system that comes with skill levels, cooldowns, status effects, etc. The list goes on.<\/p>\n\n\n\n<p>Epic Games actually makes and ships games, and you can\u2019t help but notice all the small QoL things that permeate the engine and are completely missing from Unity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"drawbacks\">Drawbacks<\/h2>\n\n\n\n<p>Unreal is not perfect and there are some things that are worse and require additional discipline or forethought compared to them Just Working\u2122 in Unity.<\/p>\n\n\n\n<p>A lot of what would be YAML files in Unity are binary files that are a nightmare to version control. Things are mainly referenced by paths instead of GUIDs that lead to hacks like \u201credirector\u201d assets or configuration entries to keep references alive when you move or rename something. You\u2019ll need to avoid merges with a locking workflow using something like Git LFS or P4. One File Per Actor provides some relief for .umaps, use it (4.26+)!<\/p>\n\n\n\n<p>Unity uses quaternions throughout with helper functions such as&nbsp;<code>Euler<\/code>&nbsp;to convert from designer-friendly representations, making it relatively straightforward to avoid gimbal lock. Unreal has&nbsp;<code>FRotator<\/code>&nbsp;as an entirely separate type, and you\u2019ll need to go out of your way to make sure everything uses the&nbsp;<code>FQuat<\/code>&nbsp;overloads. BP doesn\u2019t even have quaternions exposed by default.<\/p>\n\n\n\n<p>Epic ships a lot of Not-Invented-Here replacements for standard stuff that are incompatible, buggy, or both, for example&nbsp;<code>TUniquePtr<\/code>&nbsp;instead of&nbsp;<code>std::unique_ptr<\/code>,&nbsp;<code>TFunction<\/code>&nbsp;instead of&nbsp;<code>std::function<\/code>,&nbsp;<code>TVariant<\/code>&nbsp;instead of&nbsp;<code>std::variant<\/code>, etc. There is no universal best pick for these (see&nbsp;<a href=\"https:\/\/landelare.github.io\/2022\/06\/23\/epic-conventions.html\">here<\/a>), some of them are genuinely better and good to have, and Epic themselves have started abandoning others like&nbsp;<code>TAtomic<\/code>.<\/p>\n\n\n\n<p>Speaking of bugs, although this is unfortunately equivalent to Unity, there are some features that are more or less broken.&nbsp;<code>UChildActorComponent<\/code>s sound like a nice replacement for prefabs, but don\u2019t use them (at all).<\/p>\n\n\n\n<p>Strings come in three flavors with their separate macros for literals.&nbsp;<code>FName<\/code>&nbsp;needs&nbsp;<code>\"\"<\/code>&nbsp;(most often),&nbsp;<code>FString<\/code>&nbsp;needs&nbsp;<code>TEXT(\"\")<\/code>,&nbsp;<code>FText<\/code>&nbsp;needs&nbsp;<code>LOCTEXT<\/code>\/<code>NSLOCTEXT<\/code>\/<code>INVTEXT<\/code>, but some other combinations also work (and waste CPU). Epic code is not consistent when it comes to using these correctly.<\/p>\n\n\n\n<p>Constructors make&nbsp;<code>UObject<\/code>s differently compared to when they\u2019re made at runtime. This is a small minefield that you have to correctly navigate every time: components need&nbsp;<code>Visible<\/code>&nbsp;<code>UPROPERTY<\/code>&nbsp;specifiers, not&nbsp;<code>Edit<\/code>&nbsp;(even for editing), and when creating them at runtime you need to call both&nbsp;<code>RegisterComponent<\/code>&nbsp;and&nbsp;<code>AddInstanceComponent<\/code>. Why these are not one function call is a mystery, and even engine code randomly forgets calling the latter.<\/p>\n\n\n\n<p>The convention for engine units is 1u=1cm, and the coordinate system uses +X for forward. This means most digital content creation tools need special settings to export assets correctly (and often you\u2019ll see hacks like characters being rotated 90\u00b0 in a blueprint because the meshes were imported from Maya).<\/p>\n\n\n\n<p>Some parts of BP are best to be avoided completely, structs and enums are infamous examples.<\/p>\n\n\n\n<!--nextpage-->\n\n\n\n<p>I&#8217;ve been using Unreal for a few years now, and I&#8217;m pretty comfortable with it. When I first started, the only other game framework I had experience with was Unity, and the transition from Unity to Unreal was pretty tough.<\/p>\n\n\n\n<p>At the time, I wished there was an article on how to go from Unity to Unreal, not just &#8220;hey learn C++&#8221; but more about the mindset to take when using Unreal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"read-the-source-code\">Read the Source Code<\/h2>\n\n\n\n<p>This is probably the single most important thing to do when learning Unreal. Unity (at the time of writing) is mostly closed-source, but its documentation is pretty good, so the only way to learn is throuFor more info on trial-and-error.<\/p>\n\n\n\n<p>Conversely, Unreal&#8217;s documentation is a little&nbsp;<em>terse<\/em>. You&#8217;re far better off looking at the source code for how the engine does things. You&#8217;ll learn how to use classes and components, and how to compose your game.<\/p>\n\n\n\n<p>For more info on what resources to consult, check out my tutorial on&nbsp;<a href=\"https:\/\/benui.ca\/unreal\/help-resources\/\">Help and Resources for Unreal Engine<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"subclassing-is-important-for-core-behaviour\">Subclassing is Important for Core Behaviour<\/h2>\n\n\n\n<p>Unity is a much purer entity-component system than Unreal. Its GameObjects are empty containers to which you add components. If you want custom behaviour, you add a new component.<\/p>\n\n\n\n<p>Unity has very little in the way of existing code that you are expected to extend. It&#8217;s far more agnostic than Unreal, whose code base was built on the multiplayer first-person shooters.<\/p>\n\n\n\n<p>What does that mean for you as a developer? Well in Unreal you are&nbsp;<em>expected<\/em>&nbsp;to subclass existing core classes to get the behaviour you want. Unreal uses a core classes like&nbsp;<a href=\"http:\/\/api.unrealengine.com\/INT\/API\/Runtime\/Engine\/GameFramework\/AGameMode\/index.html\"><code>AGameMode<\/code><\/a>,&nbsp;<a href=\"http:\/\/api.unrealengine.com\/INT\/API\/Runtime\/Engine\/GameFramework\/AGameState\/index.html\"><code>AGameState<\/code><\/a>,&nbsp;<a href=\"http:\/\/api.unrealengine.com\/INT\/API\/Runtime\/Engine\/Engine\/UGameInstance\/index.html\"><code>UGameInstance<\/code><\/a>&nbsp;to name a few. You&nbsp;<em>should<\/em>&nbsp;subclass these to set up your core gameplay loop.<\/p>\n\n\n\n<p>You then configure Unreal to use your subclasses instead of its defaults.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dont-agonize-over-finding-the-perfect-place-for-stuff\">Don&#8217;t agonize over finding the perfect place for stuff<\/h2>\n\n\n\n<p>As a corollary to the point above, sometimes it can be really hard to find the&nbsp;<em>perfect<\/em>&nbsp;place for code. Should I put my custom code in&nbsp;<code>AGameState<\/code>&nbsp;or&nbsp;<code>AGameMode<\/code>?<\/p>\n\n\n\n<p>There is usually a correct answer to this depending on what you&#8217;re doing, but sometimes there isn&#8217;t. Don&#8217;t spend ages searching the codebase to find the perfect spot, it&#8217;s better to just get something working and wrap it in an accessor method so that you can move it later if needs be.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"learn-and-follow-naming-conventions\">Learn and Follow Naming Conventions<\/h2>\n\n\n\n<p>Unreal is pretty strict with naming conventions, and there are a lot of them. Some things are enforced, if you create a subclass of&nbsp;<code>AActor<\/code>&nbsp;and don&#8217;t prefix your class with&nbsp;<code>A<\/code>&nbsp;then it won&#8217;t even compile. Some other conventions, like naming Blueprints with the&nbsp;<code>BP_<\/code>&nbsp;prefix, are not enforced. Either way, I think it&#8217;s best to&nbsp;<a href=\"https:\/\/docs.unrealengine.com\/en-us\/Programming\/Development\/CodingStandard\">learn the coding standard<\/a>&nbsp;and stick to it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"use-blueprints-scripting-to-learn-move-to-c-when-you-understand\">Use Blueprints scripting to learn, move to C++ when you understand<\/h2>\n\n\n\n<p>Unreal has a visual scripting system called Blueprints that can be very helpful when prototyping. It autocompletes in a useful way and doesn&#8217;t require you to recompile your game every time you want to make a minor change.<\/p>\n\n\n\n<p>It can help you learn what the myriad classes in Unreal are for, and how they should be used.<\/p>\n\n\n\n<p>However, I would warn against using them exclusively. For code that runs every frame they are not as fast as C++, and they can be far more difficult to debug. When you understand the systems that your scripts are using, I would recommend you move your logic from Blueprints to C++.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p>Unity&#8217;s learning curve is definitely more gradual than Unreal; You can start with an empty scene and gradually add objects and scripts as you implement your game. Any existing code is &#8220;opt-in&#8221;. Unreal is kind of the opposite, the learning curve is much steeper and it feels like there&#8217;s a lot of learning to be done before you write your first line of code.<\/p>\n\n\n\n<p>But don&#8217;t be put off, Unreal is a fantastic engine and once you&#8217;ve got over that first initial hurdle, I&#8217;ve found it&#8217;s a lot more smooth sailing than Unity&#8217;s closed-source ecosystem.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Let&#8217;s rephrase a fundamental question here. I&#038;#82 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5217"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5217"}],"version-history":[{"count":2,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5217\/revisions"}],"predecessor-version":[{"id":5220,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5217\/revisions\/5220"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}