mirror of
https://github.com/litruv/Docs-Viewer.git
synced 2026-07-24 02:36:07 +10:00
130 lines
27 KiB
HTML
130 lines
27 KiB
HTML
<!DOCTYPE html> <html><head>
|
||
<title>Blueprint Penetration Trace</title>
|
||
<base href="./">
|
||
<meta id="root-path" root-path="./">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, minimum-scale=1.0, maximum-scale=5.0">
|
||
<meta charset="UTF-8">
|
||
<meta name="description" content="Documentation - Blueprint Penetration Trace">
|
||
<meta property="og:title" content="Blueprint Penetration Trace">
|
||
<meta property="og:description" content="Documentation - Blueprint Penetration Trace">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="blueprint-penetration-trace.html">
|
||
<meta property="og:image" content="images/depthtracebychannel.png">
|
||
<meta property="og:site_name" content="Documentation">
|
||
<meta name="author" content="Litruv"><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="lib/rss.xml"><script async="" id="webpage-script" src="lib/scripts/webpage.js" onload="this.onload=null;this.setAttribute("loaded", "true")"></script><link rel="icon" href="lib/media/favicon.png"><style>body{--line-width:40em;--line-width-adaptive:40em;--file-line-width:40em;--sidebar-width:min(20em, 80vw);--collapse-arrow-size:11px;--tree-horizontal-spacing:0.6em;--tree-vertical-spacing:0.6em;--sidebar-margin:12px}.sidebar{height:100%;min-width:calc(var(--sidebar-width) + var(--divider-width-hover));max-width:calc(var(--sidebar-width) + var(--divider-width-hover));font-size:14px;z-index:10;position:relative;overflow:hidden;transition:min-width ease-in-out,max-width ease-in-out;transition-duration:.2s;contain:size}.sidebar-left{left:0}.sidebar-right{right:0}.sidebar.is-collapsed{min-width:0;max-width:0}body.floating-sidebars .sidebar{position:absolute}.sidebar-content{height:100%;min-width:calc(var(--sidebar-width) - var(--divider-width-hover));top:0;padding:var(--sidebar-margin);padding-top:4em;line-height:var(--line-height-tight);background-color:var(--background-secondary);transition:background-color,border-right,border-left,box-shadow;transition-duration:var(--color-fade-speed);transition-timing-function:ease-in-out;position:absolute;display:flex;flex-direction:column}.sidebar:not(.is-collapsed) .sidebar-content{min-width:calc(max(100%,var(--sidebar-width)) - 3px);max-width:calc(max(100%,var(--sidebar-width)) - 3px)}.sidebar-left .sidebar-content{left:0;border-top-right-radius:var(--radius-l);border-bottom-right-radius:var(--radius-l)}.sidebar-right .sidebar-content{right:0;border-top-left-radius:var(--radius-l);border-bottom-left-radius:var(--radius-l)}.sidebar:has(.sidebar-content:empty):has(.topbar-content:empty){display:none}.sidebar-topbar{height:2em;width:var(--sidebar-width);top:var(--sidebar-margin);padding-inline:var(--sidebar-margin);z-index:1;position:fixed;display:flex;align-items:center;transition:width ease-in-out;transition-duration:inherit}.sidebar.is-collapsed .sidebar-topbar{width:calc(2.3em + var(--sidebar-margin) * 2)}.sidebar .sidebar-topbar.is-collapsed{width:0}.sidebar-left .sidebar-topbar{left:0}.sidebar-right .sidebar-topbar{right:0}.topbar-content{overflow:hidden;overflow:clip;width:100%;height:100%;display:flex;align-items:center;transition:inherit}.sidebar.is-collapsed .topbar-content{width:0;transition:inherit}.clickable-icon.sidebar-collapse-icon{background-color:transparent;color:var(--icon-color-focused);padding:0!important;margin:0!important;height:100%!important;width:2.3em!important;margin-inline:0.14em!important;position:absolute}.sidebar-left .clickable-icon.sidebar-collapse-icon{transform:rotateY(180deg);right:var(--sidebar-margin)}.sidebar-right .clickable-icon.sidebar-collapse-icon{transform:rotateY(180deg);left:var(--sidebar-margin)}.clickable-icon.sidebar-collapse-icon svg.svg-icon{width:100%;height:100%}.sidebar-section-header{margin:0 0 1em 0;text-transform:uppercase;letter-spacing:.06em;font-weight:600}body{transition:background-color var(--color-fade-speed) ease-in-out}.webpage-container{display:flex;flex-direction:row;height:100%;width:100%;align-items:stretch;justify-content:center}.document-container{opacity:1;flex-basis:100%;max-width:100%;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;transition:opacity .2s ease-in-out;contain:inline-size}.hide{opacity:0;transition:opacity .2s ease-in-out}.document-container>.markdown-preview-view{margin:var(--sidebar-margin);margin-bottom:0;width:100%;width:-webkit-fill-available;width:-moz-available;width:fill-available;background-color:var(--background-primary);transition:background-color var(--color-fade-speed) ease-in-out;border-top-right-radius:var(--window-radius,var(--radius-m));border-top-left-radius:var(--window-radius,var(--radius-m));overflow-x:hidden!important;overflow-y:auto!important;display:flex!important;flex-direction:column!important;align-items:center!important;contain:inline-size}.document-container>.markdown-preview-view>.markdown-preview-sizer{padding-bottom:80vh!important;width:100%!important;max-width:var(--line-width)!important;flex-basis:var(--line-width)!important;transition:background-color var(--color-fade-speed) ease-in-out;contain:inline-size}.markdown-rendered img:not([width]),.view-content img:not([width]){max-width:100%;outline:0}.document-container>.view-content.embed{display:flex;padding:1em;height:100%;width:100%;align-items:center;justify-content:center}.document-container>.view-content.embed>*{max-width:100%;max-height:100%;object-fit:contain}:has(> :is(.math,table)){overflow-x:auto!important}.document-container>.view-content{overflow-x:auto;contain:content;padding:0;margin:0;height:100%}.scroll-highlight{position:absolute;width:100%;height:100%;pointer-events:none;z-index:1000;background-color:hsla(var(--color-accent-hsl),.25);opacity:0;padding:1em;inset:50%;translate:-50% -50%;border-radius:var(--radius-s)}</style><script defer="">async function loadIncludes(){if("file:"!=location.protocol){let e=document.querySelectorAll("include");for(let t=0;t<e.length;t++){let o=e[t],l=o.getAttribute("src");try{const e=await fetch(l);if(!e.ok){console.log("Could not include file: "+l),o?.remove();continue}let t=await e.text(),n=document.createRange().createContextualFragment(t),i=Array.from(n.children);for(let e of i)e.classList.add("hide"),e.style.transition="opacity 0.5s ease-in-out",setTimeout((()=>{e.classList.remove("hide")}),10);o.before(n),o.remove(),console.log("Included file: "+l)}catch(e){o?.remove(),console.log("Could not include file: "+l,e);continue}}}else{if(document.querySelectorAll("include").length>0){var e=document.createElement("div");e.id="error",e.textContent="Web server exports must be hosted on an http / web server to be viewed correctly.",e.style.position="fixed",e.style.top="50%",e.style.left="50%",e.style.transform="translate(-50%, -50%)",e.style.fontSize="1.5em",e.style.fontWeight="bold",e.style.textAlign="center",document.body.appendChild(e),document.querySelector(".document-container")?.classList.remove("hide")}}}document.addEventListener("DOMContentLoaded",(()=>{loadIncludes()}));let isFileProtocol="file:"==location.protocol;function waitLoadScripts(e,t){let o=e.map((e=>document.getElementById(e+"-script"))),l=0;!function e(){let n=o[l];l++,n&&"true"!=n.getAttribute("loaded")||l<o.length&&e(),l<o.length?n.addEventListener("load",e):t()}()}</script><link rel="stylesheet" href="lib/styles/obsidian.css"><link rel="preload" href="lib/styles/global-variable-styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="lib/styles/global-variable-styles.css"></noscript><link rel="preload" href="lib/styles/main-styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="lib/styles/main-styles.css"></noscript><link rel="preload" href="lib/styles/snippets.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="lib/styles/snippets.css"></noscript></head><body class="publish css-settings-manager theme-dark show-inline-title show-ribbon"><script defer="">let theme=localStorage.getItem("theme")||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");"dark"==theme?(document.body.classList.add("theme-dark"),document.body.classList.remove("theme-light")):(document.body.classList.add("theme-light"),document.body.classList.remove("theme-dark")),window.innerWidth<480?document.body.classList.add("is-phone"):window.innerWidth<768?document.body.classList.add("is-tablet"):window.innerWidth<1024?document.body.classList.add("is-small-screen"):document.body.classList.add("is-large-screen")</script><div class="webpage-container workspace"><div class="sidebar-left sidebar"><div class="sidebar-topbar"><div class="topbar-content"></div><div class="clickable-icon sidebar-collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="svg-icon"><path d="M21 3H3C1.89543 3 1 3.89543 1 5V19C1 20.1046 1.89543 21 3 21H21C22.1046 21 23 20.1046 23 19V5C23 3.89543 22.1046 3 21 3Z"></path><path d="M10 4V20"></path><path d="M4 7H7"></path><path d="M4 10H7"></path><path d="M4 13H7"></path></svg></div></div><div class="sidebar-content"></div><script defer="">let ls = document.querySelector(".sidebar-left"); ls.classList.add("is-collapsed"); if (window.innerWidth > 768) ls.classList.remove("is-collapsed"); ls.style.setProperty("--sidebar-width", localStorage.getItem("sidebar-left-width"));</script></div><div class="document-container markdown-reading-view hide"><div class="markdown-preview-view markdown-rendered is-readable-line-width"><style id="MJX-CHTML-styles"></style><div class="markdown-preview-sizer markdown-preview-section"><h1 class="page-title heading inline-title" id="Blueprint Penetration Trace">Blueprint Penetration Trace</h1><div class="el-p"><p dir="auto">This is a <code>Blueprint Function Library</code> with a few functions that are callable in <code>AActors</code> to do depth trace results, for use in things like projectiles and tools.</p></div><div class="el-p"><p dir="auto"><span alt="TraceExample.mp4" src="TraceExample.mp4" class="internal-embed media-embed video-embed is-loaded"><video controls="" preload="metadata" src="images/traceexample.mp4" style=""></video></span></p></div><div class="el-h2 heading-wrapper"><h2 data-heading="Features" dir="auto" class="heading" id="Features"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Features</h2><div class="heading-children"><div class="el-ul"><ul>
|
||
<li data-line="0" dir="auto">Depth-based trace</li>
|
||
<li data-line="1" dir="auto">Forward and backward trace results for bullet holes</li>
|
||
<li data-line="2" dir="auto">Simple to implement into existing systems</li>
|
||
<li data-line="3" dir="auto">Easy debug options</li>
|
||
</ul></div><div class="el-hr"><hr></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="How it works" dir="auto" class="heading" id="How_it_works"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>How it works</h2><div class="heading-children"><div class="el-p"><p dir="auto">This node works by simulating depth using two line traces—one forward and one backward from the point of impact. These traces scan for objects in their paths and gather information about the hit results. The distance travelled through each material is multiplied by its density (defined in the material's physical properties), which determines how much the projectile is slowed down or whether it stops entirely. Finally, the node returns a list of hit results, including the total depth.</p></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="Variants" dir="auto" class="heading" id="Variants"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Variants</h2><div class="heading-children"><div class="el-p"><p dir="auto">Depth Trace by Channel<br>
|
||
<span alt="DepthTraceByChannel.png" src="DepthTraceByChannel.png" class="internal-embed media-embed image-embed is-loaded"><img alt="DepthTraceByChannel.png" src="images/depthtracebychannel.png"></span><br>
|
||
Depth Trace for Objects<br>
|
||
<span alt="DepthTraceForObjects.png" src="DepthTraceForObjects.png" class="internal-embed media-embed image-embed is-loaded"><img alt="DepthTraceForObjects.png" src="images/depthtraceforobjects.png"></span><br>
|
||
Depth Trace by Profile<br>
|
||
<span alt="DepthTraceByProfile.png" src="DepthTraceByProfile.png" class="internal-embed media-embed image-embed is-loaded"><img alt="DepthTraceByProfile.png" src="images/depthtracebyprofile.png"></span></p></div><div class="el-h3 heading-wrapper"><h3 data-heading="Input" dir="auto" class="heading" id="Input"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Input</h3><div class="heading-children"><div class="el-table" dir="ltr" style="overflow-x: auto;"><table>
|
||
<thead>
|
||
<tr>
|
||
<th dir="ltr"><strong>Member</strong></th>
|
||
<th dir="ltr"><strong>Definition</strong></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td dir="ltr"><strong>Start</strong></td>
|
||
<td dir="ltr">Start of the Trace</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>End</strong></td>
|
||
<td dir="ltr">End of the Trace</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Trace Complex</strong></td>
|
||
<td dir="ltr">If the trace will use <a data-tooltip-position="top" aria-label="https://dev.epicgames.com/documentation/en-us/unreal-engine/simple-versus-complex-collision-in-unreal-engine" rel="noopener nofollow" class="external-link" href="https://dev.epicgames.com/documentation/en-us/unreal-engine/simple-versus-complex-collision-in-unreal-engine" target="_blank">Complex Collision</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Actors To Ignore</strong></td>
|
||
<td dir="ltr">Array of Actors, to ignore while tracing</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Draw Debug Type</strong></td>
|
||
<td dir="ltr">Draw Debug Arrows over Time, or Persistently</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Ignore Self</strong></td>
|
||
<td dir="ltr">If the traces should ignore the Current actor (Self)</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Trace Color</strong></td>
|
||
<td dir="ltr">The color of the trace, when it's not going through anything.</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Trace Hit Color</strong></td>
|
||
<td dir="ltr">The color of the trace, when it's going through something.</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Draw Time</strong></td>
|
||
<td dir="ltr">Amount of time to draw debug lines (if not persistent)</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr"><strong>Max Depth</strong></td>
|
||
<td dir="ltr">Maximum depth for the trace to go</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div></div></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="Implementing into existing systems" dir="auto" class="heading" id="Implementing_into_existing_systems"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Implementing into existing systems</h2><div class="heading-children"><div class="el-p"><p dir="auto">This can be seamlessly integrated with existing systems with minimal changes to your current blueprint setup.</p></div><div class="el-p"><p dir="auto">By simply replacing your current line trace nodes with the Depth Trace node, you’ll get the added benefit of depth effects.</p></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="Adding Trace Collision Channel (optional)" dir="auto" class="heading" id="Adding_Trace_Collision_Channel_(optional)"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Adding Trace Collision Channel (optional)</h2><div class="heading-children"><div class="el-p"><p dir="auto">While adding a custom collision channel is optional, it can be a bit more time-consuming and may cause other systems in your project to break if not set up correctly. By default, your existing channels might not be set to overlap, so setting up a new custom trace channel helps ensure compatibility.</p></div><div class="el-p"><p dir="auto">To set up a custom trace channel in Unreal Engine, follow these steps:</p></div><div class="el-ol"><ol>
|
||
<li data-line="0" dir="auto">Go to <strong>Project Settings → Engine → Collision</strong>.</li>
|
||
<li data-line="1" dir="auto">In the <strong>Collision Channels</strong> section, click <strong>Add New</strong>.</li>
|
||
<li data-line="2" dir="auto"><div class="list-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Set the following properties for the new channel:
|
||
<ul>
|
||
<li data-line="3" dir="auto"><strong>Name</strong>: <code>Projectile</code> (or a name of your choice)</li>
|
||
<li data-line="4" dir="auto"><strong>Default Response</strong>: <code>Overlap</code></li>
|
||
</ul>
|
||
</li>
|
||
</ol></div><div class="el-p"><p dir="auto">For more detailed instructions on adding a custom object type to your project, you can refer to the <a data-tooltip-position="top" aria-label="https://dev.epicgames.com/documentation/en-us/unreal-engine/add-a-custom-object-type-to-your-project-in-unreal-engine" rel="noopener nofollow" class="external-link" href="https://dev.epicgames.com/documentation/en-us/unreal-engine/add-a-custom-object-type-to-your-project-in-unreal-engine" target="_blank">Unreal Engine Wiki on Custom Object Types</a>.</p></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="Physical materials (optional)" dir="auto" class="heading" id="Physical_materials_(optional)"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Physical materials (optional)</h2><div class="heading-children"><div class="el-p"><p dir="auto">Default <a data-tooltip-position="top" aria-label="https://dev.epicgames.com/documentation/en-us/unreal-engine/physical-materials-user-guide-for-unreal-engine" rel="noopener nofollow" class="external-link" href="https://dev.epicgames.com/documentation/en-us/unreal-engine/physical-materials-user-guide-for-unreal-engine" target="_blank">Physical Material</a> properties are at <strong>1 g/cm</strong>, but adding more physical properties into your game can add extra depth. </p></div><div class="el-h3 heading-wrapper"><h3 data-heading="Example Material Densities" dir="auto" class="heading" id="Example_Material_Densities"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Example Material Densities</h3><div class="heading-children"><div class="el-table" dir="ltr" style="overflow-x: auto;"><table>
|
||
<thead>
|
||
<tr>
|
||
<th dir="ltr">Material</th>
|
||
<th dir="ltr">Density (g/cm³)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td dir="ltr">Styrofoam</td>
|
||
<td dir="auto">0.1</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Pine Wood</td>
|
||
<td dir="auto">0.5</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Water</td>
|
||
<td dir="auto">0.5</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Glass</td>
|
||
<td dir="auto">1</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Concrete</td>
|
||
<td dir="auto">2.4</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Aluminum</td>
|
||
<td dir="auto">2.7</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Iron/Steel</td>
|
||
<td dir="auto">7.8</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Copper</td>
|
||
<td dir="auto">8.9</td>
|
||
</tr>
|
||
<tr>
|
||
<td dir="ltr">Lead</td>
|
||
<td dir="auto">11.3</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div><div class="el-hr"><hr></div></div></div></div></div><div class="el-h2 heading-wrapper"><h2 data-heading="Acknowledgements" dir="auto" class="heading" id="Acknowledgements"><div class="heading-collapse-indicator collapse-indicator collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div>Acknowledgements</h2><div class="heading-children"><div class="el-ul"><ul>
|
||
<li data-line="0" dir="auto"><a data-tooltip-position="top" aria-label="https://opengameart.org/users/loafbrr1" rel="noopener nofollow" class="external-link" href="https://opengameart.org/users/loafbrr1" target="_blank">loafbrr_1</a> for the pistol model</li>
|
||
<li data-line="1" dir="auto"><a data-tooltip-position="top" aria-label="https://commons.wikimedia.org/wiki/File:B1_full_size_1500_target.jpg" rel="noopener nofollow" class="external-link" href="https://commons.wikimedia.org/wiki/File:B1_full_size_1500_target.jpg" target="_blank">Neil Francis</a> for the target image</li>
|
||
</ul></div><div class="mod-footer mod-ui"></div></div></div></div></div></div><div class="sidebar-right sidebar"><div class="sidebar-topbar"><div class="topbar-content"></div><div class="clickable-icon sidebar-collapse-icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="svg-icon"><path d="M21 3H3C1.89543 3 1 3.89543 1 5V19C1 20.1046 1.89543 21 3 21H21C22.1046 21 23 20.1046 23 19V5C23 3.89543 22.1046 3 21 3Z"></path><path d="M10 4V20"></path><path d="M4 7H7"></path><path d="M4 10H7"></path><path d="M4 13H7"></path></svg></div></div><div class="sidebar-content"><div class="tree-container mod-root nav-folder tree-item outline-tree" data-depth="0"><div class="tree-header"><span class="sidebar-section-header">Table Of Contents</span><button class="clickable-icon collapse-tree-button" aria-label="Collapse All"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></svg></button></div><div class="tree-scroll-area tree-item-children nav-folder-children"><div class="tree-item mod-tree-folder nav-folder mod-collapsible is-collapsed" style="display: none;"></div><div class="tree-item" data-depth="1"><a class="tree-link" href="blueprint-penetration-trace.html#Blueprint Penetration Trace"><div class="tree-item-contents heading-link" heading-name="Blueprint Penetration Trace"><span class="tree-item-title">Blueprint Penetration Trace</span></div></a><div class="tree-item-children nav-folder-children"><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Features"><div class="tree-item-contents heading-link" heading-name="Features"><span class="tree-item-title">Features</span></div></a><div class="tree-item-children nav-folder-children"></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#How_it_works"><div class="tree-item-contents heading-link" heading-name="How it works"><span class="tree-item-title">How it works</span></div></a><div class="tree-item-children nav-folder-children"></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Variants"><div class="tree-item-contents heading-link" heading-name="Variants"><span class="tree-item-title">Variants</span></div></a><div class="tree-item-children nav-folder-children"><div class="tree-item" data-depth="3"><a class="tree-link" href="blueprint-penetration-trace.html#Input"><div class="tree-item-contents heading-link" heading-name="Input"><span class="tree-item-title">Input</span></div></a><div class="tree-item-children nav-folder-children"></div></div></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Implementing_into_existing_systems"><div class="tree-item-contents heading-link" heading-name="Implementing into existing systems"><span class="tree-item-title">Implementing into existing systems</span></div></a><div class="tree-item-children nav-folder-children"></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Adding_Trace_Collision_Channel_(optional)"><div class="tree-item-contents heading-link" heading-name="Adding Trace Collision Channel (optional)"><span class="tree-item-title">Adding Trace Collision Channel (optional)</span></div></a><div class="tree-item-children nav-folder-children"></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Physical_materials_(optional)"><div class="tree-item-contents heading-link" heading-name="Physical materials (optional)"><span class="tree-item-title">Physical materials (optional)</span></div></a><div class="tree-item-children nav-folder-children"><div class="tree-item" data-depth="3"><a class="tree-link" href="blueprint-penetration-trace.html#Example_Material_Densities"><div class="tree-item-contents heading-link" heading-name="Example Material Densities"><span class="tree-item-title">Example Material Densities</span></div></a><div class="tree-item-children nav-folder-children"></div></div></div></div><div class="tree-item" data-depth="2"><a class="tree-link" href="blueprint-penetration-trace.html#Acknowledgements"><div class="tree-item-contents heading-link" heading-name="Acknowledgements"><span class="tree-item-title">Acknowledgements</span></div></a><div class="tree-item-children nav-folder-children"></div></div></div></div></div></div></div><script defer="">let rs = document.querySelector(".sidebar-right"); rs.classList.add("is-collapsed"); if (window.innerWidth > 768) rs.classList.remove("is-collapsed"); rs.style.setProperty("--sidebar-width", localStorage.getItem("sidebar-right-width"));</script></div></div></body></html> |