{"id":6249,"date":"2025-08-06T17:13:40","date_gmt":"2025-08-06T08:13:40","guid":{"rendered":"https:\/\/blog.criware.com\/?p=6249"},"modified":"2025-08-06T17:29:44","modified_gmt":"2025-08-06T08:29:44","slug":"charging-weapon-sounds","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2025\/08\/06\/charging-weapon-sounds\/","title":{"rendered":"Charging Weapon Sounds [Part 2]"},"content":{"rendered":"<p>In the <a href=\"https:\/\/blog.criware.com\/index.php\/2025\/08\/05\/charging-weapon-sounds-part-1\/\">previous post<\/a>, we prepared an ADX Cue Sheet containing Cues for a charging weapon and for several shots based on the charging state. In this post, we will import the data authored in AtomCraft into Unreal Engine and implement it in the game using Blueprints.<\/p>\n<h5>Importing the Cue Sheet<\/h5>\n<p>To add the binary Cue Sheet to your game project, import the .acb and .acf files that were built into the content drawer (content browser).<\/p>\n<p>The .acf file contains all the Atom Craft project information. When importing, you will be asked if you want to update the Atom plug-in with the Atom Configuration contained in this file; press \u201cYes\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA20.png\" alt=\"\" width=\"444\" height=\"146\" class=\"alignnone size-full wp-image-6251\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA20.png 444w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA20-300x99.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/p>\n<p>You can easily verify that the Cue Sheet was successfully imported. When you inspect its content, you should see the 2 Cues we created in the previous post, one for the charging weapon and one for that contains the 3 shots. (Note that if you didn\u2019t change the settings, they will have been encoded using our proprietary audio codec (HCA)).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA21.png\" alt=\"\" width=\"1390\" height=\"602\" class=\"alignnone size-full wp-image-6252\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA21.png 1390w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA21-300x130.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA21-1024x443.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA21-768x333.png 768w\" sizes=\"auto, (max-width: 1390px) 100vw, 1390px\" \/><\/p>\n<h5>Input registration<\/h5>\n<p>First, we need to register the input button that will be used to charge the weapon. Right-click anywhere in the content drawer (content browser) and select &#8220;Input&#8221; \u2192 &#8220;Input Action&#8221; to create an Input Action. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA22.png\" alt=\"\" width=\"866\" height=\"574\" class=\"alignnone size-full wp-image-6253\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA22.png 866w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA22-300x199.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA22-768x509.png 768w\" sizes=\"auto, (max-width: 866px) 100vw, 866px\" \/><\/p>\n<p>You will also need an &#8220;Input Mapping Context&#8221; that groups together the input buttons, so create one now.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA23.png\" alt=\"\" width=\"1005\" height=\"551\" class=\"alignnone size-full wp-image-6254\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA23.png 1005w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA23-300x164.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA23-768x421.png 768w\" sizes=\"auto, (max-width: 1005px) 100vw, 1005px\" \/><\/p>\n<p>You can confirm that the two assets have indeed been created. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA24.png\" alt=\"\" width=\"575\" height=\"268\" class=\"alignnone size-full wp-image-6255\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA24.png 575w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA24-300x140.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/p>\n<p>Open the Input Mapping Context and register the Input Action. In this example, we assigned the charging action to the left-click of the mouse.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA25.png\" alt=\"\" width=\"1394\" height=\"600\" class=\"alignnone size-full wp-image-6256\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA25.png 1394w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA25-300x129.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA25-1024x441.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA25-768x331.png 768w\" sizes=\"auto, (max-width: 1394px) 100vw, 1394px\" \/><\/p>\n<h5>Playing the sounds<\/h5>\n<p>Fiest, let&#8217;s open the character&#8217;s Blueprint Actor.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA26.png\" alt=\"\" width=\"633\" height=\"254\" class=\"alignnone size-full wp-image-6257\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA26.png 633w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA26-300x120.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/p>\n<p>Register the Input Mapping Context for the Event Begin Play timing so that it can be used by this character.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA27.png\" alt=\"\" width=\"756\" height=\"361\" class=\"alignnone size-full wp-image-6258\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA27.png 1080w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA27-300x144.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA27-1024x490.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA27-768x368.png 768w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/p>\n<p>Add an event node <strong>EnhancedInputAction IA_ChargeShot<\/strong> that will handle the input we registered.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA28.png\" alt=\"\" width=\"399\" height=\"422\" class=\"alignnone size-full wp-image-6259\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA28.png 570w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA28-284x300.png 284w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/p>\n<p>Let\u2019s add a variable &#8220;bCharge&#8221; of type Boolean that will help us keep track of when the weapon is charging.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA29.png\" alt=\"\" width=\"417\" height=\"404\" class=\"alignnone size-full wp-image-6260\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA29.png 417w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA29-300x291.png 300w\" sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/p>\n<p>In the <strong>EnhancedInputAction IA_ChargeShot<\/strong> node, &#8220;Started&#8221; will be triggered when the button is pressed (&#8220;bCharge&#8221; will become True), and &#8220;Completed&#8221; will be triggered when the button is released (&#8220;bCharge&#8221; will become False).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA30.png\" alt=\"\" width=\"738\" height=\"561\" class=\"alignnone size-full wp-image-6261\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA30.png 1054w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA30-300x228.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA30-1024x778.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA30-768x584.png 768w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/p>\n<p>If you are unsure whether the input processing is correct, try displaying a simple test message with a <strong>Print String<\/strong> node. In this case, the current &#8220;bCharge&#8221; status will be displayed in the upper left corner of the screen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA31_PSD.png\" alt=\"\" width=\"791\" height=\"415\" class=\"alignnone size-full wp-image-6262\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA31_PSD.png 791w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA31_PSD-300x157.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA31_PSD-768x403.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA31_PSD-390x205.png 390w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><\/p>\n<p>When &#8220;bCharge&#8221; becomes True, the charging sound will be started by the <strong>Spawn Sound Attached<\/strong> node. This node will cause the sound to follow the specified component as soon as it plays. The destination should be the character mesh or whatever is emitting the charging sound.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA32.png\" alt=\"\" width=\"797\" height=\"388\" class=\"alignnone size-full wp-image-6263\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA32.png 1139w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA32-300x146.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA32-1024x499.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA32-768x374.png 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/p>\n<p>Right-click the blue output pin of the <strong>Spawn Sound Attached<\/strong> node and select \u201cPromote to Variable\u201d to make it a variable. This will allow us to easily access the sound later.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA33_PSD.png\" alt=\"\" width=\"830\" height=\"470\" class=\"alignnone size-full wp-image-6264\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA33_PSD.png 830w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA33_PSD-300x170.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA33_PSD-768x435.png 768w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><\/p>\n<p>Here, we named it &#8220;Charge Sound&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA34_PSD.png\" alt=\"\" width=\"902\" height=\"457\" class=\"alignnone size-full wp-image-6265\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA34_PSD.png 902w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA34_PSD-300x152.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA34_PSD-768x389.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/p>\n<p>Also, check &#8220;Auto Destroy&#8221; to automatically destroy the component when the playback stops.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA35_PSD.png\" alt=\"\" width=\"867\" height=\"727\" class=\"alignnone size-full wp-image-6266\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA35_PSD.png 867w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA35_PSD-300x252.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA35_PSD-768x644.png 768w\" sizes=\"auto, (max-width: 867px) 100vw, 867px\" \/><\/p>\n<p>If we are charging the weapon and the input strength is lower than 0.1 (i.e., the button is released), the charging state is set back to False, and the playback of the charging sound is stopped using the <strong>Stop<\/strong> and <strong>Destroy Component<\/strong> nodes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA36.png\" alt=\"\" width=\"1496\" height=\"575\" class=\"alignnone size-full wp-image-6267\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA36.png 1496w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA36-300x115.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA36-1024x394.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA36-768x295.png 768w\" sizes=\"auto, (max-width: 1496px) 100vw, 1496px\" \/><\/p>\n<p>Then, we play the sound of the shot sound using the <strong>Spawn Sound at Location<\/strong> node.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA37_PSD.png\" alt=\"\" width=\"807\" height=\"356\" class=\"alignnone size-full wp-image-6268\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA37_PSD.png 1153w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA37_PSD-300x132.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA37_PSD-1024x452.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA37_PSD-768x339.png 768w\" sizes=\"auto, (max-width: 807px) 100vw, 807px\" \/><\/p>\n<p>This is what the whole logic looks like at that point.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38.png\" alt=\"\" width=\"1798\" height=\"819\" class=\"alignnone size-full wp-image-6269\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38.png 1798w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38-300x137.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38-1024x466.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38-768x350.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA38-1536x700.png 1536w\" sizes=\"auto, (max-width: 1798px) 100vw, 1798px\" \/><\/p>\n<p>Now that the minimum functionality is implemented, let&#8217;s test it!<br \/>\nThe charging sound should loop while the button is pressed, and stop when we release it, at which point the shot sound will play instead.<\/p>\n<h5>Updating the charging sound<\/h5>\n<p>We want the charging sound to progressively change over time as the weapon becomes more and more charged.<br \/>\nFirst, let\u2019s add a variable of type Float called &#8220;ChargeLv&#8221; that will be used to store the charging level.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA39.png\" alt=\"\" width=\"411\" height=\"455\" class=\"alignnone size-full wp-image-6270\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA39.png 411w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA39-271x300.png 271w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/p>\n<p>We want to progressively increase the charging level while the button stays pressed. To achieve this, we add a <strong>Get World Delta Seconds<\/strong> node and increase the charging level by 1.0 per second.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA40_PSD.png\" alt=\"\" width=\"1286\" height=\"354\" class=\"alignnone size-full wp-image-6271\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA40_PSD.png 1286w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA40_PSD-300x83.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA40_PSD-1024x282.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA40_PSD-768x211.png 768w\" sizes=\"auto, (max-width: 1286px) 100vw, 1286px\" \/><\/p>\n<p>To prevent the charging level from increasing too much if we hold down the button for a long time, we add a <strong>Clamp<\/strong> node that will limit the maximum value it can reach.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA41.png\" alt=\"\" width=\"1377\" height=\"513\" class=\"alignnone size-full wp-image-6272\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA41.png 1377w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA41-300x112.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA41-1024x381.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA41-768x286.png 768w\" sizes=\"auto, (max-width: 1377px) 100vw, 1377px\" \/><\/p>\n<p>Finally, we will use a <strong>Set Aisac by Name <\/strong>node to control the Cue\u2019s pitch via its AISAC.<br \/>\nThe value of the \u201cChargeLv&#8221; variable will be used.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA42_PSD.png\" alt=\"\" width=\"1193\" height=\"454\" class=\"alignnone size-full wp-image-6273\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA42_PSD.png 1193w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA42_PSD-300x114.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA42_PSD-1024x390.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA42_PSD-768x292.png 768w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/p>\n<p>To force the value in the [0\u20261.0] range expected by the AISAC, we add a <strong>Map Range Clamped<\/strong> node. Enter the input range (minimum and maximum values of the charging level) into &#8220;In Range&#8221;, and the output range (minimum and maximum values of the AISAC control) into &#8220;Out Range&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA43.png\" alt=\"\" width=\"1753\" height=\"880\" class=\"alignnone size-full wp-image-6274\" \/><\/p>\n<h5>Playing the right shooting sound<\/h5>\n<p>Our last implementation point consists of triggering different shooting sounds based on the charging level. <\/p>\n<p>The shooting sound will change automatically according to the game variable set on the AtomCraft side (see previous post), so all we need to do here is to assign the game variable with <strong>Set Atom Game Variable<\/strong> node. <\/p>\n<p>Just like we did with the AISAC control, we process the value with a <strong>Map Range Clamped<\/strong> node and pass it to the game variable.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA44.png\" alt=\"\" width=\"1802\" height=\"827\" class=\"alignnone size-full wp-image-6275\" \/><\/p>\n<p>Of course, when a shot is fired, we also need to reset the charging level. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/08\/EA45.png\" alt=\"\" width=\"1786\" height=\"803\" class=\"alignnone size-full wp-image-6276\" \/><\/p>\n<p>And that\u2019s it! This simple game mechanic undoubtedly adds tension to a game, and now the sounds are a part of it too!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the previous post, we prepared an ADX Cue Sheet containing Cues for a charging weapon and for several shots<\/p>\n","protected":false},"author":2,"featured_media":6250,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[5,7,22],"tags":[],"class_list":["post-6249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adx","category-tutorials","category-unreal-engine"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/comments?post=6249"}],"version-history":[{"count":8,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6249\/revisions"}],"predecessor-version":[{"id":6288,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6249\/revisions\/6288"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/6250"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=6249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=6249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=6249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}