UNPKG

com.wallstop-studios.unity-helpers

Version:

Treasure chest of Unity developer tools

1,458 lines 289 kB
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Production-ready Unity utilities: 10-15x faster PRNGs, O(log n) spatial queries, zero-allocation pooling, Odin-level inspector tooling, and data-driven effects."><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/unity-helpers/features/inspector/inspector-button/ rel=canonical><link href=../inspector-overview/ rel=prev><link href=../inspector-grouping-attributes/ rel=next><link rel=icon href=../../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.3"><title>Buttons - Unity Helpers</title><link rel=stylesheet href=../../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.ab4e12ef.min.css><style>:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M64%20480c-35.3%200-64-28.7-64-64V96c0-35.3%2028.7-64%2064-64h320c35.3%200%2064%2028.7%2064%2064v213.5c0%2017-6.7%2033.3-18.7%2045.3L322.7%20461.3c-12%2012-28.3%2018.7-45.3%2018.7zm325.5-176H296c-13.3%200-24%2010.7-24%2024v93.5z%22/%3E%3C/svg%3E');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M384%20512H96c-53%200-96-43-96-96V96C0%2043%2043%200%2096%200h304c26.5%200%2048%2021.5%2048%2048v288c0%2020.9-13.4%2038.7-32%2045.3V448c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032zM96%20384c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032h256v-64zm32-232c0%2013.3%2010.7%2024%2024%2024h176c13.3%200%2024-10.7%2024-24s-10.7-24-24-24H152c-13.3%200-24%2010.7-24%2024m24%2072c-13.3%200-24%2010.7-24%2024s10.7%2024%2024%2024h176c13.3%200%2024-10.7%2024-24s-10.7-24-24-24z%22/%3E%3C/svg%3E');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M256%20512a256%20256%200%201%200%200-512%20256%20256%200%201%200%200%20512m-32-352a32%2032%200%201%201%2064%200%2032%2032%200%201%201-64%200m-8%2064h48c13.3%200%2024%2010.7%2024%2024v88h8c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024h-80c-13.3%200-24-10.7-24-24s10.7-24%2024-24h24v-64h-24c-13.3%200-24-10.7-24-24s10.7-24%2024-24%22/%3E%3C/svg%3E');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20384%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M292.9%20384c7.3-22.3%2021.9-42.5%2038.4-59.9C364%20289.7%20384%20243.2%20384%20192%20384%2086%20298%200%20192%200S0%2086%200%20192c0%2051.2%2020%2097.7%2052.7%20132.1%2016.5%2017.4%2031.2%2037.6%2038.4%2059.9h201.7zm-4.9%2048H96v16c0%2044.2%2035.8%2080%2080%2080h32c44.2%200%2080-35.8%2080-80zM184%20112c-39.8%200-72%2032.2-72%2072%200%2013.3-10.7%2024-24%2024s-24-10.7-24-24c0-66.3%2053.7-120%20120-120%2013.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024%22/%3E%3C/svg%3E');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M434.8%2070.1c14.3%2010.4%2017.5%2030.4%207.1%2044.7l-256%20352c-5.5%207.6-14%2012.3-23.4%2013.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8%200-45.3s32.8-12.5%2045.3%200l101.5%20101.5%20234-321.7c10.4-14.3%2030.4-17.5%2044.7-7.1z%22/%3E%3C/svg%3E');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M256%20512a256%20256%200%201%200%200-512%20256%20256%200%201%200%200%20512m0-336c-17.7%200-32%2014.3-32%2032%200%2013.3-10.7%2024-24%2024s-24-10.7-24-24c0-44.2%2035.8-80%2080-80s80%2035.8%2080%2080c0%2047.2-36%2067.2-56%2074.5v3.8c0%2013.3-10.7%2024-24%2024s-24-10.7-24-24v-8.1c0-20.5%2014.8-35.2%2030.1-40.2%206.4-2.1%2013.2-5.5%2018.2-10.3%204.3-4.2%207.7-10%207.7-19.6%200-17.7-14.3-32-32-32zm-32%20192a32%2032%200%201%201%2064%200%2032%2032%200%201%201-64%200%22/%3E%3C/svg%3E');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M256%200c14.7%200%2028.2%208.1%2035.2%2021l216%20400c6.7%2012.4%206.4%2027.4-.8%2039.5S486.1%20480%20472%20480H40c-14.1%200-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9%2020.5-21%2035.2-21m0%20352a32%2032%200%201%200%200%2064%2032%2032%200%201%200%200-64m0-192c-18.2%200-32.7%2015.5-31.4%2033.7l7.4%20104c.9%2012.5%2011.4%2022.3%2023.9%2022.3%2012.6%200%2023-9.7%2023.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z%22/%3E%3C/svg%3E');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20384%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M55.1%2073.4c-12.5-12.5-32.8-12.5-45.3%200s-12.5%2032.8%200%2045.3L147.2%20256%209.9%20393.4c-12.5%2012.5-12.5%2032.8%200%2045.3s32.8%2012.5%2045.3%200l137.3-137.4%20137.4%20137.3c12.5%2012.5%2032.8%2012.5%2045.3%200s12.5-32.8%200-45.3L237.8%20256l137.3-137.4c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200L192.5%20210.7z%22/%3E%3C/svg%3E');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M416%20427.4c58.5-44%2096-111.6%2096-187.4C512%20107.5%20397.4%200%20256%200S0%20107.5%200%20240c0%2075.8%2037.5%20143.4%2096%20187.4V464c0%2026.5%2021.5%2048%2048%2048h32v-40c0-13.3%2010.7-24%2024-24s24%2010.7%2024%2024v40h64v-40c0-13.3%2010.7-24%2024-24s24%2010.7%2024%2024v40h32c26.5%200%2048-21.5%2048-48zM96%20256a64%2064%200%201%201%20128%200%2064%2064%200%201%201-128%200m256-64a64%2064%200%201%201%200%20128%2064%2064%200%201%201%200-128%22/%3E%3C/svg%3E');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20576%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M192%2096c0-53%2043-96%2096-96s96%2043%2096%2096v3.6c0%2015.7-12.7%2028.4-28.4%2028.4H220.5c-15.7%200-28.4-12.7-28.4-28.4V96zm345.6%2012.8c10.6%2014.1%207.7%2034.2-6.4%2044.8l-97.8%2073.3c5.3%208.9%209.3%2018.7%2011.8%2029.1H544c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032h-96v32c0%202.6-.1%205.3-.2%207.9l83.4%2062.5c14.1%2010.6%2017%2030.7%206.4%2044.8s-30.7%2017-44.8%206.4l-63.1-47.3c-23.2%2044.2-66.5%2076.2-117.7%2083.9V280c0-13.3-10.7-24-24-24s-24%2010.7-24%2024v230.2c-51.2-7.7-94.5-39.7-117.7-83.9l-63.1%2047.3c-14.1%2010.6-34.2%207.7-44.8-6.4s-7.7-34.2%206.4-44.8l83.4-62.5c-.1-2.6-.2-5.2-.2-7.9v-32H32c-17.7%200-32-14.3-32-32s14.3-32%2032-32h98.8c2.5-10.4%206.5-20.2%2011.8-29.1l-97.8-73.3c-14.1-10.6-17-30.7-6.4-44.8s30.7-17%2044.8-6.4L192%20184c12.3-5.1%2025.8-8%2040-8h112c14.2%200%2027.7%202.8%2040%208l108.8-81.6c14.1-10.6%2034.2-7.7%2044.8%206.4%22/%3E%3C/svg%3E');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M288%200H128c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032v151.5L7.5%20426.3C2.6%20435%200%20444.7%200%20454.7%200%20486.4%2025.6%20512%2057.3%20512h333.4c31.6%200%2057.3-25.6%2057.3-57.3%200-10-2.6-19.8-7.5-28.4L320%20215.5V64c17.7%200%2032-14.3%2032-32S337.7%200%20320%200zm-96%20215.5V64h64v151.5c0%2011.1%202.9%2022.1%208.4%2031.8L306%20320H142l41.6-72.7c5.5-9.7%208.4-20.6%208.4-31.8%22/%3E%3C/svg%3E');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.1.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M0%20216C0%20149.7%2053.7%2096%20120%2096h8c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032h-8c-30.9%200-56%2025.1-56%2056v8h64c35.3%200%2064%2028.7%2064%2064v64c0%2035.3-28.7%2064-64%2064H64c-35.3%200-64-28.7-64-64zm256%200c0-66.3%2053.7-120%20120-120h8c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032h-8c-30.9%200-56%2025.1-56%2056v8h64c35.3%200%2064%2028.7%2064%2064v64c0%2035.3-28.7%2064-64%2064h-64c-35.3%200-64-28.7-64-64z%22/%3E%3C/svg%3E');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../stylesheets/custom.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=slate data-md-color-primary=teal data-md-color-accent=deep-orange> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#inspector-buttons-wbutton class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../../.. title="Unity Helpers" class="md-header__button md-logo" aria-label="Unity Helpers" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> Unity Helpers </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Buttons </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=teal data-md-color-accent=deep-orange aria-label="Switch to light mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=teal data-md-color-accent=deep-orange aria-label="Switch to dark mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/unity-helpers title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/unity-helpers </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../../../overview/getting-started/ class=md-tabs__link> Getting Started </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../inspector-overview/ class=md-tabs__link> Features </a> </li> <li class=md-tabs__item> <a href=../../../performance/random-performance/ class=md-tabs__link> Performance </a> </li> <li class=md-tabs__item> <a href=../../../guides/odin-migration-guide/ class=md-tabs__link> Guides </a> </li> <li class=md-tabs__item> <a href=../../../project/contributing/ class=md-tabs__link> Contributing </a> </li> <li class=md-tabs__item> <a href=../../../project/license/ class=md-tabs__link> Project </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../../.. title="Unity Helpers" class="md-nav__button md-logo" aria-label="Unity Helpers" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> Unity Helpers </label> <div class=md-nav__source> <a href=https://github.com/wallstop/unity-helpers title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/unity-helpers </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../overview/ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../overview/getting-started/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../../../overview/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../../overview/roadmap/ class=md-nav__link> <span class=md-ellipsis> Roadmap </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> Features </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Features </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_1 checked> <label class=md-nav__link for=__nav_3_1 id=__nav_3_1_label tabindex> <span class=md-ellipsis> Inspector </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_1_label aria-expanded=true> <label class=md-nav__title for=__nav_3_1> <span class="md-nav__icon md-icon"></span> Inspector </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../inspector-overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Buttons </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Buttons </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> <li class=md-nav__item> <a href=#basic-usage class=md-nav__link> <span class=md-ellipsis> Basic Usage </span> </a> </li> <li class=md-nav__item> <a href=#parameters class=md-nav__link> <span class=md-ellipsis> Parameters </span> </a> <nav class=md-nav aria-label=Parameters> <ul class=md-nav__list> <li class=md-nav__item> <a href=#parameter-overview class=md-nav__link> <span class=md-ellipsis> Parameter Overview </span> </a> </li> <li class=md-nav__item> <a href=#displayname-string-optional class=md-nav__link> <span class=md-ellipsis> displayName (string, optional) </span> </a> </li> <li class=md-nav__item> <a href=#draworder-int-optional class=md-nav__link> <span class=md-ellipsis> drawOrder (int, optional) </span> </a> </li> <li class=md-nav__item> <a href=#historycapacity-int-optional class=md-nav__link> <span class=md-ellipsis> historyCapacity (int, optional) </span> </a> </li> <li class=md-nav__item> <a href=#colorkey-string-optional class=md-nav__link> <span class=md-ellipsis> colorKey (string, optional) </span> </a> </li> <li class=md-nav__item> <a href=#groupname-string-optional class=md-nav__link> <span class=md-ellipsis> groupName (string, optional) </span> </a> </li> <li class=md-nav__item> <a href=#grouppriority-int-optional class=md-nav__link> <span class=md-ellipsis> groupPriority (int, optional) </span> </a> </li> <li class=md-nav__item> <a href=#groupplacement-wbuttongroupplacement-optional class=md-nav__link> <span class=md-ellipsis> groupPlacement (WButtonGroupPlacement, optional) </span> </a> </li> <li class=md-nav__item> <a href=#combining-grouppriority-and-groupplacement class=md-nav__link> <span class=md-ellipsis> Combining groupPriority and groupPlacement </span> </a> </li> <li class=md-nav__item> <a href=#complete-example class=md-nav__link> <span class=md-ellipsis> Complete Example </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#execution-types class=md-nav__link> <span class=md-ellipsis> Execution Types </span> </a> <nav class=md-nav aria-label="Execution Types"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-void-methods-immediate class=md-nav__link> <span class=md-ellipsis> 1. Void Methods (Immediate) </span> </a> </li> <li class=md-nav__item> <a href=#2-returning-values-with-history class=md-nav__link> <span class=md-ellipsis> 2. Returning Values (With History) </span> </a> </li> <li class=md-nav__item> <a href=#3-coroutines-ienumerator class=md-nav__link> <span class=md-ellipsis> 3. Coroutines (IEnumerator) </span> </a> </li> <li class=md-nav__item> <a href=#4-async-methods-task-valuetask class=md-nav__link> <span class=md-ellipsis> 4. Async Methods (Task / ValueTask) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#result-history class=md-nav__link> <span class=md-ellipsis> Result History </span> </a> <nav class=md-nav aria-label="Result History"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#automatic-history class=md-nav__link> <span class=md-ellipsis> Automatic History </span> </a> </li> <li class=md-nav__item> <a href=#history-capacity-options class=md-nav__link> <span class=md-ellipsis> History Capacity Options </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#draw-order-positioning class=md-nav__link> <span class=md-ellipsis> Draw Order &amp; Positioning </span> </a> <nav class=md-nav aria-label="Draw Order & Positioning"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pagination-by-draw-order class=md-nav__link> <span class=md-ellipsis> Pagination by Draw Order </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#grouping class=md-nav__link> <span class=md-ellipsis> Grouping </span> </a> <nav class=md-nav aria-label=Grouping> <ul class=md-nav__list> <li class=md-nav__item> <a href=#foldout-behavior class=md-nav__link> <span class=md-ellipsis> Foldout Behavior </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#color-theming class=md-nav__link> <span class=md-ellipsis> Color Theming </span> </a> </li> <li class=md-nav__item> <a href=#configuration class=md-nav__link> <span class=md-ellipsis> Configuration </span> </a> <nav class=md-nav aria-label=Configuration> <ul class=md-nav__list> <li class=md-nav__item> <a href=#global-settings class=md-nav__link> <span class=md-ellipsis> Global Settings </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#best-practices class=md-nav__link> <span class=md-ellipsis> Best Practices </span> </a> <nav class=md-nav aria-label="Best Practices"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-clear-button-names class=md-nav__link> <span class=md-ellipsis> 1. Clear Button Names </span> </a> </li> <li class=md-nav__item> <a href=#2-group-related-actions class=md-nav__link> <span class=md-ellipsis> 2. Group Related Actions </span> </a> </li> <li class=md-nav__item> <a href=#3-use-history-for-randomvariable-results class=md-nav__link> <span class=md-ellipsis> 3. Use History for Random/Variable Results </span> </a> </li> <li class=md-nav__item> <a href=#4-async-best-practices class=md-nav__link> <span class=md-ellipsis> 4. Async Best Practices </span> </a> </li> <li class=md-nav__item> <a href=#5-color-usage class=md-nav__link> <span class=md-ellipsis> 5. Color Usage </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#examples class=md-nav__link> <span class=md-ellipsis> Examples </span> </a> <nav class=md-nav aria-label=Examples> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example-1-gameplay-testing class=md-nav__link> <span class=md-ellipsis> Example 1: Gameplay Testing </span> </a> </li> <li class=md-nav__item> <a href=#example-2-async-data-loading class=md-nav__link> <span class=md-ellipsis> Example 2: Async Data Loading </span> </a> </li> <li class=md-nav__item> <a href=#example-3-procedural-generation-testing class=md-nav__link> <span class=md-ellipsis> Example 3: Procedural Generation Testing </span> </a> </li> <li class=md-nav__item> <a href=#example-4-coroutine-animation-testing class=md-nav__link> <span class=md-ellipsis> Example 4: Coroutine Animation Testing </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#using-wbutton-with-custom-editors class=md-nav__link> <span class=md-ellipsis> Using WButton with Custom Editors </span> </a> <nav class=md-nav aria-label="Using WButton with Custom Editors"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#overview class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=#automatic-integration-with-odin-inspector class=md-nav__link> <span class=md-ellipsis> Automatic Integration with Odin Inspector </span> </a> </li> <li class=md-nav__item> <a href=#integration-with-custom-odin-editors class=md-nav__link> <span class=md-ellipsis> Integration with Custom Odin Editors </span> </a> </li> <li class=md-nav__item> <a href=#integration-with-standard-custom-editors class=md-nav__link> <span class=md-ellipsis> Integration with Standard Custom Editors </span> </a> </li> <li class=md-nav__item> <a href=#wbuttoneditorhelper-api class=md-nav__link> <span class=md-ellipsis> WButtonEditorHelper API </span> </a> </li> <li class=md-nav__item> <a href=#single-location-button-drawing class=md-nav__link> <span class=md-ellipsis> Single Location Button Drawing </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#troubleshooting class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> <nav class=md-nav aria-label=Troubleshooting> <ul class=md-nav__list> <li class=md-nav__item> <a href=#button-not-appearing class=md-nav__link> <span class=md-ellipsis> Button Not Appearing </span> </a> </li> <li class=md-nav__item> <a href=#history-not-showing class=md-nav__link> <span class=md-ellipsis> History Not Showing </span> </a> </li> <li class=md-nav__item> <a href=#async-method-not-cancelling class=md-nav__link> <span class=md-ellipsis> Async Method Not Cancelling </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#see-also class=md-nav__link> <span class=md-ellipsis> See Also </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../inspector-grouping-attributes/ class=md-nav__link> <span class=md-ellipsis> Grouping Attributes </span> </a> </li> <li class=md-nav__item> <a href=../inspector-selection-attributes/ class=md-nav__link> <span class=md-ellipsis> Selection Attributes </span> </a> </li> <li class=md-nav__item> <a href=../inspector-conditional-display/ class=md-nav__link> <span class=md-ellipsis> Conditional Display </span> </a> </li> <li class=md-nav__item> <a href=../inspector-validation-attributes/ class=md-nav__link> <span class=md-ellipsis> Validation Attributes </span> </a> </li> <li class=md-nav__item> <a href=../inspector-inline-editor/ class=md-nav__link> <span class=md-ellipsis> Inline Editor </span> </a> </li> <li class=md-nav__item> <a href=../inspector-settings/ class=md-nav__link> <span class=md-ellipsis> Inspector Settings </span> </a> </li> <li class=md-nav__item> <a href=../utility-components/ class=md-nav__link> <span class=md-ellipsis> Utility Components </span> </a> </li> <li class=md-nav__item> <a href=../visual-components/ class=md-nav__link> <span class=md-ellipsis> Visual Components </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> Relational Components </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> Relational Components </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../relational-components/relational-components/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> Spatial Data Structures </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> Spatial Data Structures </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../spatial/spatial-trees-2d-guide/ class=md-nav__link> <span class=md-ellipsis> 2D Spatial Trees </span> </a> </li> <li class=md-nav__item> <a href=../../spatial/spatial-trees-3d-guide/ class=md-nav__link> <span class=md-ellipsis> 3D Spatial Trees </span> </a> </li> <li class=md-nav__item> <a href=../../spatial/hulls/ class=md-nav__link> <span class=md-ellipsis> Hull Algorithms </span> </a> </li> <li class=md-nav__item> <a href=../../spatial/spatial-tree-semantics/ class=md-nav__link> <span class=md-ellipsis> Spatial Tree Semantics </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_4> <label class=md-nav__link for=__nav_3_4 id=__nav_3_4_label tabindex> <span class=md-ellipsis> Effects System </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> Effects System </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../effects/effects-system/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../effects/effects-system-tutorial/ class=md-nav__link> <span class=md-ellipsis> Tutorial </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_5> <label class=md-nav__link for=__nav_3_5 id=__nav_3_5_label tabindex> <span class=md-ellipsis> Serialization </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_5_label aria-expanded=false> <label class=md-nav__title for=__nav_3_5> <span class="md-nav__icon md-icon"></span> Serialization </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../serialization/serialization/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../serialization/serialization-types/ class=md-nav__link> <span class=md-ellipsis> Serializable Types </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_6> <label class=md-nav__link for=__nav_3_6 id=__nav_3_6_label tabindex> <span class=md-ellipsis> Utilities </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_6_label aria-expanded=false> <label class=md-nav__title for=__nav_3_6> <span class="md-nav__icon md-icon"></span> Utilities </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../utilities/math-and-extensions/ class=md-nav__link> <span class=md-ellipsis> Math & Extensions </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/data-structures/ class=md-nav__link> <span class=md-ellipsis> Data Structures </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/random-generators/ class=md-nav__link> <span class=md-ellipsis> Random Generators </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/singletons/ class=md-nav__link> <span class=md-ellipsis> Singletons </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/reflection-helpers/ class=md-nav__link> <span class=md-ellipsis> Reflection Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/helper-utilities/ class=md-nav__link> <span class=md-ellipsis> Helper Utilities </span> </a> </li> <li class=md-nav__item> <a href=../../utilities/pooling-guide/ class=md-nav__link> <span class=md-ellipsis> Pooling Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_7> <label class=md-nav__link for=__nav_3_7 id=__nav_3_7_label tabindex> <span class=md-ellipsis> Logging </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_7_label aria-expanded=false> <label class=md-nav__title for=__nav_3_7> <span class="md-nav__icon md-icon"></span> Logging </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../logging/logging-extensions/ class=md-nav__link> <span class=md-ellipsis> Logging Extensions </span> </a> </li> <li class=md-nav__item> <a href=../../logging/unity-main-thread-dispatcher/ class=md-nav__link> <span class=md-ellipsis> Main Thread Dispatcher </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_8> <label class=md-nav__link for=__nav_3_8 id=__nav_3_8_label tabindex> <span class=md-ellipsis> Editor Tools </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_8_label aria-expanded=false> <label class=md-nav__title for=__nav_3_8> <span class="md-nav__icon md-icon"></span> Editor Tools </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../editor-tools/editor-tools-guide/ class=md-nav__link> <span class=md-ellipsis> Tools Guide </span> </a> </li> <li class=md-nav__item> <a href=../../editor-tools/unity-method-analyzer/ class=md-nav__link> <span class=md-ellipsis> Unity Method Analyzer </span> </a> </li> <li class=md-nav__item> <a href=../../editor-tools/asset-change-detection/ class=md-nav__link> <span class=md-ellipsis> Asset Change Detection </span> </a> </li> <li class=md-nav__item> <a href=../../editor-tools/failed-tests-exporter/ class=md-nav__link> <span class=md-ellipsis> Failed Tests Exporter </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Performance </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Performance </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../performance/random-performance/ class=md-nav__link> <span class=md-ellipsis> Random Generators </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/spatial-tree-2d-performance/ class=md-nav__link> <span class=md-ellipsis> Spatial Trees 2D </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/spatial-tree-3d-performance/ class=md-nav__link> <span class=md-ellipsis> Spatial Trees 3D </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/relational-components-performance/ class=md-nav__link> <span class=md-ellipsis> Relational Components </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/reflection-performance/ class=md-nav__link> <span class=md-ellipsis> Reflection Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/ilist-sorting-performance/ class=md-nav__link> <span class=md-ellipsis> IList Sorting </span> </a> </li> <li class=md-nav__item> <a href=../../../performance/baseline-tests-performance/ class=md-nav__link> <span class=md-ellipsis> Baseline Tests </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../guides/odin-migration-guide/ class=md-nav__link> <span class=md-ellipsis> Odin Migration </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Contributing </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Contributing </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../project/contributing/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../../contributing/testing-patterns/ class=md-nav__link> <span class=md-ellipsis> Testing Patterns </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex=0> <span class=md-ellipsis> Project </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Project </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../project/license/ class=md-nav__link> <span class=md-ellipsis> License </span> </a> </li> <li class=md-nav__item> <a href=../../../project/third-party-notices/ class=md-nav__link> <span class=md-ellipsis> Third-Party Notices </span> </a> </li> <li class=md-nav__item> <a href=../../../project/llms-txt/ class=md-nav__link> <span class=md-ellipsis> LLMs.txt </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../inspector-overview/ class=md-path__link> <span class=md-ellipsis> Features </span> </a> </li> <li class=md-path__item> <a href=../inspector-overview/ class=md-path__link> <span class=md-ellipsis> Inspector </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/unity-helpers/edit/main/docs/features/inspector/inspector-button.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75z"/></svg> </a> <a href=https://github.com/wallstop/unity-helpers/raw/main/docs/features/inspector/inspector-button.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0 8a5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5 5 5 0 0 1-5 5m0-12.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5"/></svg> </a> <h1 id=inspector-buttons-wbutton>Inspector Buttons (WButton)<a class=headerlink href=#inspector-buttons-wbutton title="Permanent link">&para;</a></h1> <p><strong>Execute methods from the inspector with one click.</strong></p> <p>The <code>[WButton]</code> attribute exposes methods as clickable buttons in the Unity inspector, complete with result history, async support, cancellation, custom styling, and automatic grouping. Test gameplay features, debug systems, and prototype rapidly without writing custom editors.</p> <hr> <h2 id=table-of-contents>Table of Contents<a class=headerlink href=#table-of-contents title="Permanent link">&para;</a></h2> <ul> <li><a href=#basic-usage>Basic Usage</a></li> <li><a href=#parameters>Parameters</a></li> <li><a href=#colorkey-string-optional>colorKey</a></li> <li><a href=#grouppriority-int-optional>groupPriority</a></li> <li><a href=#groupplacement-wbuttongroupplacement-optional>groupPlacement</a></li> <li><a href=#execution-types>Execution Types</a></li> <li><a href=#result-history>Result History</a></li> <li><a href=#draw-order--positioning>Draw Order &amp; Positioning</a></li> <li><a href=#grouping>Grouping</a></li> <li><a href=#color-theming>Color Theming</a></li> <li><a href=#configuration>Configuration</a></li> <li><a href=#best-practices>Best Practices</a></li> <li><a href=#examples>Examples</a></li> <li><a href=#using-wbutton-with-custom-editors>Using WButton with Custom Editors</a></li> <li><a href=#troubleshooting>Troubleshooting</a></li> </ul> <hr> <h2 id=basic-usage>Basic Usage<a class=headerlink href=#basic-usage title="Permanent link">&para;</a></h2> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1> 1</a></span>
<span class=normal><a href=#__codelineno-0-2> 2</a></span>
<span class=normal><a href=#__codelineno-0-3> 3</a></span>
<span class=normal><a href=#__codelineno-0-4> 4</a></span>
<span class=normal><a href=#__codelineno-0-5> 5</a></span>
<span class=normal><a href=#__codelineno-0-6> 6</a></span>
<span class=normal><a href=#__codelineno-0-7> 7</a></span>
<span class=normal><a href=#__codelineno-0-8> 8</a></span>
<span class=normal><a href=#__codelineno-0-9> 9</a></span>
<span class=normal><a href=#__codelineno-0-10>10</a></span>
<span class=normal><a href=#__codelineno-0-11>11</a></span>
<span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3></a>
</span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>PlayerController</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5></a><span class=p>{</span>
</span><span id=__span-0-6><a id=__codelineno-0-6 name=__codelineno-0-6></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-0-7><a id=__codelineno-0-7 name=__codelineno-0-7></a>
</span><span id=__span-0-8><a id=__codelineno-0-8 name=__codelineno-0-8></a><span class=w>    </span><span class=na>[WButton(&quot;Heal Player&quot;)]</span>
</span><span id=__span-0-9><a id=__codelineno-0-9 name=__codelineno-0-9></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Heal</span><span class=p>()</span>
</span><span id=__span-0-10><a id=__codelineno-0-10 name=__codelineno-0-10></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-0-11><a id=__codelineno-0-11 name=__codelineno-0-11></a><span class=w>        </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-0-12><a id=__codelineno-0-12 name=__codelineno-0-12></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Player healed!&quot;</span><span class=p>);</span>
</span><span id=__span-0-13><a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-0-14><a id=__codelineno-0-14 name=__codelineno-0-14></a>
</span><span id=__span-0-15><a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=w>    </span><span class=na>[WButton(&quot;Take Damage&quot;)]</span>
</span><span id=__span-0-16><a id=__codelineno-0-16 name=__codelineno-0-16></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>()</span>
</span><span id=__span-0-17><a id=__codelineno-0-17 name=__codelineno-0-17></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-0-18><a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=w>        </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=mi>10</span><span class=p>;</span>
</span><span id=__span-0-19><a id=__codelineno-0-19 name=__codelineno-0-19></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Player took damage! Health: {health}&quot;</span><span class=p>);</span>
</span><span id=__span-0-20><a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-0-21><a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h2 id=parameters>Parameters<a class=headerlink href=#parameters title="Permanent link">&para;</a></h2> <p>The <code>[WButton]</code> attribute accepts several optional parameters to customize button appearance, behavior, and organization.</p> <h3 id=parameter-overview>Parameter Overview<a class=headerlink href=#parameter-overview title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-1-1>1</a></span>
<span class=normal><a href=#__codelineno-1-2>2</a></span>
<span class=normal><a href=#__codelineno-1-3>3</a></span>
<span class=normal><a href=#__codelineno-1-4>4</a></span>
<span class=normal><a href=#__codelineno-1-5>5</a></span>
<span class=normal><a href=#__codelineno-1-6>6</a></span>
<span class=normal><a href=#__codelineno-1-7>7</a></span>
<span class=normal><a href=#__codelineno-1-8>8</a></span>
<span class=normal><a href=#__codelineno-1-9>9</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1></a><span class=na>[WButton(</span>
</span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2></a><span class=na>    string displayName = null,</span>
</span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3></a><span class=na>    int drawOrder = 0,</span>
</span><span id=__span-1-4><a id=__codelineno-1-4 name=__codelineno-1-4></a><span class=na>    int historyCapacity = WButtonAttribute.UseGlobalHistory,</span>
</span><span id=__span-1-5><a id=__codelineno-1-5 name=__codelineno-1-5></a><span class=na>    string colorKey = null,</span>
</span><span id=__span-1-6><a id=__codelineno-1-6 name=__codelineno-1-6></a><span class=na>    string groupName = null,</span>
</span><span id=__span-1-7><a id=__codelineno-1-7 name=__codelineno-1-7></a><span class=na>    int groupPriority = WButtonAttribute.NoGroupPriority,</span>
</span><span id=__span-1-8><a id=__codelineno-1-8 name=__codelineno-1-8></a><span class=na>    WButtonGroupPlacement groupPlacement = WButtonGroupPlacement.UseGlobalSetting</span>
</span><span id=__span-1-9><a id=__codelineno-1-9 name=__codelineno-1-9></a><span class=na>)]</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=displayname-string-optional>displayName (string, optional)<a class=headerlink href=#displayname-string-optional title="Permanent link">&para;</a></h3> <p><strong>Controls the text shown on the button in the inspector.</strong></p> <ul> <li><strong>Default:</strong> Uses the method name (e.g., <code>"RollDice"</code> for <code>RollDice()</code>)</li> <li><strong>When to use:</strong> Make buttons more readable or add context</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-2-1> 1</a></span>
<span class=normal><a href=#__codelineno-2-2> 2</a></span>
<span class=normal><a href=#__codelineno-2-3> 3</a></span>
<span class=normal><a href=#__codelineno-2-4> 4</a></span>
<span class=normal><a href=#__codelineno-2-5> 5</a></span>
<span class=normal><a href=#__codelineno-2-6> 6</a></span>
<span class=normal><a href=#__codelineno-2-7> 7</a></span>
<span class=normal><a href=#__codelineno-2-8> 8</a></span>
<span class=normal><a href=#__codelineno-2-9> 9</a></span>
<span class=normal><a href=#__codelineno-2-10>10</a></span>
<span class=normal><a href=#__codelineno-2-11>11</a></span>
<span class=normal><a href=#__codelineno-2-12>12</a></span>
<span class=normal><a href=#__codelineno-2-13>13</a></span>
<span class=normal><a href=#__codelineno-2-14>14</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1></a><span class=c1>// Without displayName - shows &quot;SpawnEnemy&quot;</span>
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2></a><span class=na>[WButton]</span>
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4></a>
</span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5></a><span class=c1>// With displayName - shows &quot;🔫 Spawn Enemy&quot;</span>
</span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6></a><span class=na>[WButton(&quot;🔫 Spawn Enemy&quot;)]</span>
</span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy1</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8></a>
</span><span id=__span-2-9><a id=__codelineno-2-9 name=__codelineno-2-9></a><span class=c1>// More descriptive labels</span>
</span><span id=__span-2-10><a id=__codelineno-2-10 name=__codelineno-2-10></a><span class=na>[WButton(&quot;Reset Player to Checkpoint&quot;)]</span>
</span><span id=__span-2-11><a id=__codelineno-2-11 name=__codelineno-2-11></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ResetPlayer</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-2-12><a id=__codelineno-2-12 name=__codelineno-2-12></a>
</span><span id=__span-2-13><a id=__codelineno-2-13 name=__codelineno-2-13></a><span class=na>[WButton(&quot;Clear All Save Data&quot;)]</span>
</span><span id=__span-2-14><a id=__codelineno-2-14 name=__codelineno-2-14></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ClearSaveData</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Side-by-side comparison showing method names vs custom display names" src=../../../images/inspector/buttons/inspector-button-display-names.png></p> <hr> <h3 id=draworder-int-optional>drawOrder (int, optional)<a class=headerlink href=#draworder-int-optional title="Permanent link">&para;</a></h3> <p><strong>Controls the sort order of buttons within their placement section (top or bottom).</strong></p> <ul> <li><strong>Lower values render first</strong> within the same placement section</li> <li><strong>Buttons are sorted by drawOrder</strong>, then by declaration order for buttons with the same drawOrder</li> <li><strong>Does NOT control placement</strong> — use <code>groupPlacement</code> to control whether buttons appear above or below properties</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-3-1> 1</a></span>
<span class=normal><a href=#__codelineno-3-2> 2</a></span>
<span class=normal><a href=#__codelineno-3-3> 3</a></span>
<span class=normal><a href=#__codelineno-3-4> 4</a></span>
<span class=normal><a href=#__codelineno-3-5> 5</a></span>
<span class=normal><a href=#__codelineno-3-6> 6</a></span>
<span class=normal><a href=#__codelineno-3-7> 7</a></span>
<span class=normal><a href=#__codelineno-3-8> 8</a></span>
<span class=normal><a href=#__codelineno-3-9> 9</a></span>
<span class=normal><a href=#__codelineno-3-10>10</a></span>
<span class=normal><a href=#__codelineno-3-11>11</a></span>
<span class=normal><a href=#__codelineno-3-12>12</a></span>
<span class=normal><a href=#__codelineno-3-13>13</a></span>
<span class=normal><a href=#__codelineno-3-14>14</a></span>
<span class=normal><a href=#__codelineno-3-15>15</a></span>
<span class=normal><a href=#__codelineno-3-16>16</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>PlayerController1</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-3-2><a id=__codelineno-3-2 name=__codelineno-3-2></a><span class=p>{</span>
</span><span id=__span-3-3><a id=__codelineno-3-3 name=__codelineno-3-3></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-3-4><a id=__codelineno-3-4 name=__codelineno-3-4></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>float</span><span class=w> </span><span class=n>speed</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mf>5f</span><span class=p>;</span>
</span><span id=__span-3-5><a id=__codelineno-3-5 name=__codelineno-3-5></a>
</span><span id=__span-3-6><a id=__codelineno-3-6 name=__codelineno-3-6></a><span class=w>    </span><span class=c1>// These buttons render in order: Initialize, Validate, Debug Info</span>
</span><span id=__span-3-7><a id=__codelineno-3-7 name=__codelineno-3-7></a><span class=w>    </span><span class=c1>// Placement (above/below properties) is controlled by groupPlacement or global settings</span>
</span><span id=__span-3-8><a id=__codelineno-3-8 name=__codelineno-3-8></a><span class=w>    </span><span class=na>[WButton(&quot;Initialize&quot;, drawOrder: -1)]</span>
</span><span id=__span-3-9><a id=__codelineno-3-9 name=__codelineno-3-9></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Initialize</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-3-10><a id=__codelineno-3-10 name=__codelineno-3-10></a>
</span><span id=__span-3-11><a id=__codelineno-3-11 name=__codelineno-3-11></a><span class=w>    </span><span class=na>[WButton(&quot;Validate&quot;, drawOrder: 0)]</span>
</span><span id=__span-3-12><a id=__codelineno-3-12 name=__codelineno-3-12></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Validate</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-3-13><a id=__codelineno-3-13 name=__codelineno-3-13></a>
</span><span id=__span-3-14><a id=__codelineno-3-14 name=__codelineno-3-14></a><span class=w>    </span><span class=na>[WButton(&quot;Debug Info&quot;, drawOrder: 1)]</span>
</span><span id=__span-3-15><a id=__codelineno-3-15 name=__codelineno-3-15></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ShowDebugInfo</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-3-16><a id=__codelineno-3-16 name=__codelineno-3-16></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><strong>Visual layout:</strong></p> <p><img alt="Inspector showing buttons sorted by draw order" src=../../../images/inspector/buttons/inspector-button-draw-order.png></p> <hr> <h3 id=historycapacity-int-optional>historyCapacity (int, optional)<a class=headerlink href=#historycapacity-int-optional title="Permanent link">&para;</a></h3> <p><strong>Controls how many previous results are stored for methods that return values.</strong></p> <ul> <li><strong>Default:</strong> <code>WButtonAttribute.UseGlobalHistory</code> (uses project setting, typically 5)</li> <li><strong>Range:</strong> <code>1</code> to <code>10</code> results, or <code>-1</code> for global default</li> <li><strong>Applies to:</strong> Methods returning values, async tasks, or coroutines</li> <li><strong>Does not affect:</strong> <code>void</code> methods (no history stored)</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1> 1</a></span>
<span class=normal><a href=#__codelineno-4-2> 2</a></span>
<span class=normal><a href=#__codelineno-4-3> 3</a></span>
<span class=normal><a href=#__codelineno-4-4> 4</a></span>
<span class=normal><a href=#__codelineno-4-5> 5</a></span>
<span class=normal><a href=#__codelineno-4-6> 6</a></span>
<span class=normal><a href=#__codelineno-4-7> 7</a></span>
<span class=normal><a href=#__codelineno-4-8> 8</a></span>
<span class=normal><a href=#__codelineno-4-9> 9</a></span>
<span class=normal><a href=#__codelineno-4-10>10</a></span>
<span class=normal><a href=#__codelineno-4-11>11</a></span>
<span class=normal><a href=#__codelineno-4-12>12</a></span>
<span class=normal><a href=#__codelineno-4-13>13</a></span>
<span class=normal><a href=#__codelineno-4-14>14</a></span>
<span class=normal><a href=#__codelineno-4-15>15</a></span>
<span class=normal><a href=#__codelineno-4-16>16</a></span>
<span class=normal><a href=#__codelineno-4-17>17</a></span>
<span class=normal><a href=#__codelineno-4-18>18</a></span>
<span class=normal><a href=#__codelineno-4-19>19</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1></a><span class=c1>// Use global setting (default: 5 results)</span>
</span><span id=__span-4-2><a id=__codelineno-4-2 name=__codelineno-4-2></a><span class=na>[WButton(&quot;Roll Dice&quot;)]</span>
</span><span id=__span-4-3><a id=__codelineno-4-3 name=__codelineno-4-3></a><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>RollDice</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1</span><span class=p>,</span><span class=w> </span><span class=mi>7</span><span class=p>);</span>
</span><span id=__span-4-4><a id=__codelineno-4-4 name=__codelineno-4-4></a>
</span><span id=__span-4-5><a id=__codelineno-4-5 name=__codelineno-4-5></a><span class=c1>// Store only last result</span>
</span><span id=__span-4-6><a id=__codelineno-4-6 name=__codelineno-4-6></a><span class=na>[WButton(&quot;Get Timestamp&quot;, historyCapacity: 1)]</span>
</span><span id=__span-4-7><a id=__codelineno-4-7 name=__codelineno-4-7></a><span class=k>private</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=nf>GetTimestamp</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>DateTime</span><span class=p>.</span><span class=n>Now</span><span class=p>.</span><span class=n>ToString</span><span class=p>();</span>
</span><span id=__span-4-8><a id=__codelineno-4-8 name=__codelineno-4-8></a>
</span><span id=__span-4-9><a id=__codelineno-4-9 name=__codelineno-4-9></a><span class=c1>// Store up to 10 results for detailed history</span>
</span><span id=__span-4-10><a id=__codelineno-4-10 name=__codelineno-4-10></a><span class=na>[WButton(&quot;Measure Frame Time&quot;, historyCapacity: 10)]</span>
</span><span id=__span-4-11><a id=__codelineno-4-11 name=__codelineno-4-11></a><span class=k>private</span><span class=w> </span><span class=kt>float</span><span class=w> </span><span class=nf>MeasureFrameTime</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Time</span><span class=p>.</span><span class=n>deltaTime</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=mf>1000f</span><span class=p>;</span>
</span><span id=__span-4-12><a id=__codelineno-4-12 name=__codelineno-4-12></a>
</span><span id=__span-4-13><a id=__codelineno-4-13 name=__codelineno-4-13></a><span class=c1>// Disable history completely (1 = minimum)</span>
</span><span id=__span-4-14><a id=__codelineno-4-14 name=__codelineno-4-14></a><span class=na>[WButton(&quot;Ping Server&quot;, historyCapacity: 1)]</span>
</span><span id=__span-4-15><a id=__codelineno-4-15 name=__codelineno-4-15></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=o>&lt;</span><span class=kt>string</span><span class=o>&gt;</span><span class=w> </span><span class=n>PingServerAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-4-16><a id=__codelineno-4-16 name=__codelineno-4-16></a><span class=p>{</span>
</span><span id=__span-4-17><a id=__codelineno-4-17 name=__codelineno-4-17></a><span class=w>    </span><span class=c1>// ... ping logic</span>
</span><span id=__span-4-18><a id=__codelineno-4-18 name=__codelineno-4-18></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=s>&quot;Pong!&quot;</span><span class=p>;</span>
</span><span id=__span-4-19><a id=__codelineno-4-19 name=__codelineno-4-19></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="History panels showing different capacity settings" src=../../../images/inspector/buttons/inspector-button-history-capacity.gif></p> <p><strong>Performance tip:</strong> Use lower values (<code>1-3</code>) for methods called frequently to reduce memory usage.</p> <hr> <h3 id=colorkey-string-optional>colorKey (string, optional)<a class=headerlink href=#colorkey-string-optional title="Permanent link">&para;</a></h3> <p><strong>Applies custom color themes to buttons using predefined color keys.</strong></p> <ul> <li><strong>Default:</strong> <code>null</code> (uses default button color)</li> <li><strong>Common values:</strong> <code>"Default"</code>, <code>"Default-Light"</code>, <code>"Default-Dark"</code>, or custom keys</li> <li><strong>Configure in:</strong> Edit → Project Settings → Unity Helpers → WButton Color Palettes</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-5-1> 1</a></span>
<span class=normal><a href=#__codelineno-5-2> 2</a></span>
<span class=normal><a href=#__codelineno-5-3> 3</a></span>
<span class=normal><a href=#__codelineno-5-4> 4</a></span>
<span class=normal><a href=#__codelineno-5-5> 5</a></span>
<span class=normal><a href=#__codelineno-5-6> 6</a></span>
<span class=normal><a href=#__codelineno-5-7> 7</a></span>
<span class=normal><a href=#__codelineno-5-8> 8</a></span>
<span class=normal><a href=#__codelineno-5-9> 9</a></span>
<span class=normal><a href=#__codelineno-5-10>10</a></span>
<span class=normal><a href=#__codelineno-5-11>11</a></span>
<span class=normal><a href=#__codelineno-5-12>12</a></span>
<span class=normal><a href=#__codelineno-5-13>13</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1></a><span class=c1>// Default blue button</span>
</span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2></a><span class=na>[WButton(&quot;Standard Action&quot;)]</span>
</span><span id=__span-5-3><a id=__codelineno-5-3 name=__codelineno-5-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>StandardAction</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-5-4><a id=__codelineno-5-4 name=__codelineno-5-4></a>
</span><span id=__span-5-5><a id=__codelineno-5-5 name=__codelineno-5-5></a><span class=c1>// Custom themed button (requires setup in project settings)</span>
</span><span id=__span-5-6><a id=__codelineno-5-6 name=__codelineno-5-6></a><span class=na>[WButton(&quot;Dangerous Action&quot;, colorKey: &quot;Danger&quot;)]</span>
</span><span id=__span-5-7><a id=__codelineno-5-7 name=__codelineno-5-7></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>DangerousAction</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-5-8><a id=__codelineno-5-8 name=__codelineno-5-8></a>
</span><span id=__span-5-9><a id=__codelineno-5-9 name=__codelineno-5-9></a><span class=na>[WButton(&quot;Success Action&quot;, colorKey: &quot;Success&quot;)]</span>
</span><span id=__span-5-10><a id=__codelineno-5-10 name=__codelineno-5-10></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SuccessAction</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-5-11><a id=__codelineno-5-11 name=__codelineno-5-11></a>
</span><span id=__span-5-12><a id=__codelineno-5-12 name=__codelineno-5-12></a><span class=na>[WButton(&quot;Warning Action&quot;, colorKey: &quot;Warning&quot;)]</span>
</span><span id=__span-5-13><a id=__codelineno-5-13 name=__codelineno-5-13></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>WarningAction</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Buttons with different color themes" src=../../../images/inspector/buttons/button-color-themes.png></p> <p><strong>Setting up custom colors:</strong></p> <ol> <li>Open Edit → Project Settings → Unity Helpers</li> <li>Navigate to WButton Color Palettes</li> <li>Add a new color key (e.g., <code>"Danger"</code>)</li> <li>Set background/text colors</li> <li>Use the key in your <code>[WButton]</code> attribute</li> </ol> <p><img alt="Button color configuration via Unity Helper Settings" src=../../../images/inspector/buttons/add-color-themes.gif></p> <p><img alt="Project settings showing color palette configuration" src=../../../images/inspector/buttons/inspector-button-settings-colors.png></p> <hr> <h3 id=groupname-string-optional>groupName (string, optional)<a class=headerlink href=#groupname-string-optional title="Permanent link">&para;</a></h3> <p><strong>Organizes buttons under labeled group headers.</strong></p> <ul> <li><strong>Default:</strong> <code>null</code> (no group header)</li> <li><strong>Behavior:</strong> All buttons with the same <code>groupName</code> are merged into a single group</li> <li><strong>Best practice:</strong> Use with <code>groupPlacement</code> and <code>groupPriority</code> to control where groups appear</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-6-1> 1</a></span>
<span class=normal><a href=#__codelineno-6-2> 2</a></span>
<span class=normal><a href=#__codelineno-6-3> 3</a></span>
<span class=normal><a href=#__codelineno-6-4> 4</a></span>
<span class=normal><a href=#__codelineno-6-5> 5</a></span>
<span class=normal><a href=#__codelineno-6-6> 6</a></span>
<span class=normal><a href=#__codelineno-6-7> 7</a></span>
<span class=normal><a href=#__codelineno-6-8> 8</a></span>
<span class=normal><a href=#__codelineno-6-9> 9</a></span>
<span class=normal><a href=#__codelineno-6-10>10</a></span>
<span class=normal><a href=#__codelineno-6-11>11</a></span>
<span class=normal><a href=#__codelineno-6-12>12</a></span>
<span class=normal><a href=#__codelineno-6-13>13</a></span>
<span class=normal><a href=#__codelineno-6-14>14</a></span>
<span class=normal><a href=#__codelineno-6-15>15</a></span>
<span class=normal><a href=#__codelineno-6-16>16</a></span>
<span class=normal><a href=#__codelineno-6-17>17</a></span>
<span class=normal><a href=#__codelineno-6-18>18</a></span>
<span class=normal><a href=#__codelineno-6-19>19</a></span>
<span class=normal><a href=#__codelineno-6-20>20</a></span>
<span class=normal><a href=#__codelineno-6-21>21</a></span>
<span class=normal><a href=#__codelineno-6-22>22</a></span>
<span class=normal><a href=#__codelineno-6-23>23</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameManager</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-6-2><a id=__codelineno-6-2 name=__codelineno-6-2></a><span class=p>{</span>
</span><span id=__span-6-3><a id=__codelineno-6-3 name=__codelineno-6-3></a><span class=w>    </span><span class=c1>// &quot;Debug Tools&quot; group - will appear based on groupPlacement or global settings</span>
</span><span id=__span-6-4><a id=__codelineno-6-4 name=__codelineno-6-4></a><span class=w>    </span><span class=na>[WButton(&quot;Log State&quot;, groupName: &quot;Debug Tools&quot;, groupPlacement: WButtonGroupPlacement.Top)]</span>
</span><span id=__span-6-5><a id=__codelineno-6-5 name=__codelineno-6-5></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LogState</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-6-6><a id=__codelineno-6-6 name=__codelineno-6-6></a>
</span><span id=__span-6-7><a id=__codelineno-6-7 name=__codelineno-6-7></a><span class=w>    </span><span class=na>[WButton(&quot;Clear Console&quot;, groupName: &quot;Debug Tools&quot;)]</span>
</span><span id=__span-6-8><a id=__codelineno-6-8 name=__codelineno-6-8></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ClearConsole</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-6-9><a id=__codelineno-6-9 name=__codelineno-6-9></a>
</span><span id=__span-6-10><a id=__codelineno-6-10 name=__codelineno-6-10></a><span class=w>    </span><span class=c1>// Inspector properties here</span>
</span><span id=__span-6-11><a id=__codelineno-6-11 name=__codelineno-6-11></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>currentLevel</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>1</span><span class=p>;</span>
</span><span id=__span-6-12><a id=__codelineno-6-12 name=__codelineno-6-12></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=n>debugMode</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>false</span><span class=p>;</span>
</span><span id=__span-6-13><a id=__codelineno-6-13 name=__codelineno-6-13></a>
</span><span id=__span-6-14><a id=__codelineno-6-14 name=__codelineno-6-14></a><span class=w>    </span><span class=c1>// &quot;Save System&quot; group - explicitly placed at bottom</span>
</span><span id=__span-6-15><a id=__codelineno-6-15 name=__codelineno-6-15></a><span class=w>    </span><span class=na>[WButton(&quot;Save Game&quot;, groupName: &quot;Save System&quot;, groupPlacement: WButtonGroupPlacement.Bottom)]</span>
</span><span id=__span-6-16><a id=__codelineno-6-16 name=__codelineno-6-16></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SaveGame</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-6-17><a id=__codelineno-6-17 name=__codelineno-6-17></a>
</span><span id=__span-6-18><a id=__codelineno-6-18 name=__codelineno-6-18></a><span class=w>    </span><span class=na>[WButton(&quot;Load Game&quot;, groupName: &quot;Save System&quot;)]</span>
</span><span id=__span-6-19><a id=__codelineno-6-19 name=__codelineno-6-19></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LoadGame</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-6-20><a id=__codelineno-6-20 name=__codelineno-6-20></a>
</span><span id=__span-6-21><a id=__codelineno-6-21 name=__codelineno-6-21></a><span class=w>    </span><span class=na>[WButton(&quot;Delete Save&quot;, groupName: &quot;Save System&quot;)]</span>
</span><span id=__span-6-22><a id=__codelineno-6-22 name=__codelineno-6-22></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>DeleteSave</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-6-23><a id=__codelineno-6-23 name=__codelineno-6-23></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Inspector showing grouped buttons with headers" src=../../../images/inspector/buttons/inspector-button-groups.png></p> <p><strong>Notes:</strong></p> <ul> <li>Group headers are collapsible (click the arrow to expand/collapse)</li> <li>Groups can be configured to start expanded or collapsed in project settings</li> <li>The first button in a group determines the group's canonical properties (groupPlacement, groupPriority, drawOrder)</li> </ul> <hr> <h3 id=grouppriority-int-optional>groupPriority (int, optional)<a class=headerlink href=#grouppriority-int-optional title="Permanent link">&para;</a></h3> <p><strong>Controls the render order of button groups within a placement section.</strong></p> <ul> <li><strong>Default:</strong> <code>WButtonAttribute.NoGroupPriority</code> (renders after groups with explicit priorities)</li> <li><strong>Lower values render first</strong> within the same placement (top or bottom)</li> <li><strong>Only applies</strong> to buttons with a <code>groupName</code>; ungrouped buttons ignore this value</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-7-1> 1</a></span>
<span class=normal><a href=#__codelineno-7-2> 2</a></span>
<span class=normal><a href=#__codelineno-7-3> 3</a></span>
<span class=normal><a href=#__codelineno-7-4> 4</a></span>
<span class=normal><a href=#__codelineno-7-5> 5</a></span>
<span class=normal><a href=#__codelineno-7-6> 6</a></span>
<span class=normal><a href=#__codelineno-7-7> 7</a></span>
<span class=normal><a href=#__codelineno-7-8> 8</a></span>
<span class=normal><a href=#__codelineno-7-9> 9</a></span>
<span class=normal><a href=#__codelineno-7-10>10</a></span>
<span class=normal><a href=#__codelineno-7-11>11</a></span>
<span class=normal><a href=#__codelineno-7-12>12</a></span>
<span class=normal><a href=#__codelineno-7-13>13</a></span>
<span class=normal><a href=#__codelineno-7-14>14</a></span>
<span class=normal><a href=#__codelineno-7-15>15</a></span>
<span class=normal><a href=#__codelineno-7-16>16</a></span>
<span class=normal><a href=#__codelineno-7-17>17</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>ActionPanel</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-7-2><a id=__codelineno-7-2 name=__codelineno-7-2></a><span class=p>{</span>
</span><span id=__span-7-3><a id=__codelineno-7-3 name=__codelineno-7-3></a><span class=w>    </span><span class=c1>// This group renders FIRST (priority 0)</span>
</span><span id=__span-7-4><a id=__codelineno-7-4 name=__codelineno-7-4></a><span class=w>    </span><span class=na>[WButton(&quot;Quick Save&quot;, groupName: &quot;Primary&quot;, groupPriority: 0)]</span>
</span><span id=__span-7-5><a id=__codelineno-7-5 name=__codelineno-7-5></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>QuickSave</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-7-6><a id=__codelineno-7-6 name=__codelineno-7-6></a>
</span><span id=__span-7-7><a id=__codelineno-7-7 name=__codelineno-7-7></a><span class=w>    </span><span class=na>[WButton(&quot;Quick Load&quot;, groupName: &quot;Primary&quot;, groupPriority: 0)]</span>
</span><span id=__span-7-8><a id=__codelineno-7-8 name=__codelineno-7-8></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>QuickLoad</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-7-9><a id=__codelineno-7-9 name=__codelineno-7-9></a>
</span><span id=__span-7-10><a id=__codelineno-7-10 name=__codelineno-7-10></a><span class=w>    </span><span class=c1>// This group renders SECOND (priority 10)</span>
</span><span id=__span-7-11><a id=__codelineno-7-11 name=__codelineno-7-11></a><span class=w>    </span><span class=na>[WButton(&quot;Debug Info&quot;, groupName: &quot;Debug&quot;, groupPriority: 10)]</span>
</span><span id=__span-7-12><a id=__codelineno-7-12 name=__codelineno-7-12></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ShowDebugInfo</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-7-13><a id=__codelineno-7-13 name=__codelineno-7-13></a>
</span><span id=__span-7-14><a id=__codelineno-7-14 name=__codelineno-7-14></a><span class=w>    </span><span class=c1>// This group renders LAST (no explicit priority)</span>
</span><span id=__span-7-15><a id=__codelineno-7-15 name=__codelineno-7-15></a><span class=w>    </span><span class=na>[WButton(&quot;Reset&quot;, groupName: &quot;Misc&quot;)]</span>
</span><span id=__span-7-16><a id=__codelineno-7-16 name=__codelineno-7-16></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Reset</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-7-17><a id=__codelineno-7-17 name=__codelineno-7-17></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Groups ordered by priority: Primary first, Debug second, Misc last" src=../../../images/inspector/buttons/inspector-button-group-priority.png></p> <p><strong>Important:</strong> The first declared button in a group sets the canonical priority for the entire group. If other buttons in the same group specify different priorities, they are ignored and a warning is displayed in the inspector.</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
<span class=normal><a href=#__codelineno-8-2>2</a></span>
<span class=normal><a href=#__codelineno-8-3>3</a></span>
<span class=normal><a href=#__codelineno-8-4>4</a></span>
<span class=normal><a href=#__codelineno-8-5>5</a></span>
<span class=normal><a href=#__codelineno-8-6>6</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1></a><span class=c1>// ⚠️ WARNING: Conflicting priorities in the same group</span>
</span><span id=__span-8-2><a id=__codelineno-8-2 name=__codelineno-8-2></a><span class=na>[WButton(&quot;Action A&quot;, groupName: &quot;Tools&quot;, groupPriority: 0)]</span><span class=w>  </span><span class=c1>// This priority is used</span>
</span><span id=__span-8-3><a id=__codelineno-8-3 name=__codelineno-8-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ActionA</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-8-4><a id=__codelineno-8-4 name=__codelineno-8-4></a>
</span><span id=__span-8-5><a id=__codelineno-8-5 name=__codelineno-8-5></a><span class=na>[WButton(&quot;Action B&quot;, groupName: &quot;Tools&quot;, groupPriority: 10)]</span><span class=w> </span><span class=c1>// Ignored! Warning shown</span>
</span><span id=__span-8-6><a id=__codelineno-8-6 name=__codelineno-8-6></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ActionB</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=groupplacement-wbuttongroupplacement-optional>groupPlacement (WButtonGroupPlacement, optional)<a class=headerlink href=#groupplacement-wbuttongroupplacement-optional title="Permanent link">&para;</a></h3> <p><strong>Controls where a button group renders, overriding the global Unity Helpers setting.</strong></p> <ul> <li><strong>Default:</strong> <code>WButtonGroupPlacement.UseGlobalSetting</code></li> <li><strong>Options:</strong></li> <li><code>UseGlobalSetting</code> — Respects the global setting in Project Settings</li> <li><code>Top</code> — Always render above inspector properties</li> <li><code>Bottom</code> — Always render below inspector properties</li> <li><strong>Only applies</strong> to buttons with a <code>groupName</code>; ungrouped buttons ignore this value</li> </ul> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-9-1> 1</a></span>
<span class=normal><a href=#__codelineno-9-2> 2</a></span>
<span class=normal><a href=#__codelineno-9-3> 3</a></span>
<span class=normal><a href=#__codelineno-9-4> 4</a></span>
<span class=normal><a href=#__codelineno-9-5> 5</a></span>
<span class=normal><a href=#__codelineno-9-6> 6</a></span>
<span class=normal><a href=#__codelineno-9-7> 7</a></span>
<span class=normal><a href=#__codelineno-9-8> 8</a></span>
<span class=normal><a href=#__codelineno-9-9> 9</a></span>
<span class=normal><a href=#__codelineno-9-10>10</a></span>
<span class=normal><a href=#__codelineno-9-11>11</a></span>
<span class=normal><a href=#__codelineno-9-12>12</a></span>
<span class=normal><a href=#__codelineno-9-13>13</a></span>
<span class=normal><a href=#__codelineno-9-14>14</a></span>
<span class=normal><a href=#__codelineno-9-15>15</a></span>
<span class=normal><a href=#__codelineno-9-16>16</a></span>
<span class=normal><a href=#__codelineno-9-17>17</a></span>
<span class=normal><a href=#__codelineno-9-18>18</a></span>
<span class=normal><a href=#__codelineno-9-19>19</a></span>
<span class=normal><a href=#__codelineno-9-20>20</a></span>
<span class=normal><a href=#__codelineno-9-21>21</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MixedPlacementExample</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2></a><span class=p>{</span>
</span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>float</span><span class=w> </span><span class=n>speed</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mf>5f</span><span class=p>;</span>
</span><span id=__span-9-5><a id=__codelineno-9-5 name=__codelineno-9-5></a>
</span><span id=__span-9-6><a id=__codelineno-9-6 name=__codelineno-9-6></a><span class=w>    </span><span class=c1>// This group ALWAYS renders at the top, regardless of global setting</span>
</span><span id=__span-9-7><a id=__codelineno-9-7 name=__codelineno-9-7></a><span class=w>    </span><span class=na>[WButton(&quot;Initialize&quot;, groupName: &quot;Setup&quot;, groupPlacement: WButtonGroupPlacement.Top)]</span>
</span><span id=__span-9-8><a id=__codelineno-9-8 name=__codelineno-9-8></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Initialize</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9></a>
</span><span id=__span-9-10><a id=__codelineno-9-10 name=__codelineno-9-10></a><span class=w>    </span><span class=na>[WButton(&quot;Validate&quot;, groupName: &quot;Setup&quot;, groupPlacement: WButtonGroupPlacement.Top)]</span>
</span><span id=__span-9-11><a id=__codelineno-9-11 name=__codelineno-9-11></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Validate</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-9-12><a id=__codelineno-9-12 name=__codelineno-9-12></a>
</span><span id=__span-9-13><a id=__codelineno-9-13 name=__codelineno-9-13></a><span class=w>    </span><span class=c1>// Properties appear here (health, speed)</span>
</span><span id=__span-9-14><a id=__codelineno-9-14 name=__codelineno-9-14></a>
</span><span id=__span-9-15><a id=__codelineno-9-15 name=__codelineno-9-15></a><span class=w>    </span><span class=c1>// This group ALWAYS renders at the bottom, regardless of global setting</span>
</span><span id=__span-9-16><a id=__codelineno-9-16 name=__codelineno-9-16></a><span class=w>    </span><span class=na>[WButton(&quot;Cleanup&quot;, groupName: &quot;Maintenance&quot;, groupPlacement: WButtonGroupPlacement.Bottom)]</span>
</span><span id=__span-9-17><a id=__codelineno-9-17 name=__codelineno-9-17></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Cleanup</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-9-18><a id=__codelineno-9-18 name=__codelineno-9-18></a>
</span><span id=__span-9-19><a id=__codelineno-9-19 name=__codelineno-9-19></a><span class=w>    </span><span class=na>[WButton(&quot;Reset All&quot;, groupName: &quot;Maintenance&quot;, groupPlacement: WButtonGroupPlacement.Bottom)]</span>
</span><span id=__span-9-20><a id=__codelineno-9-20 name=__codelineno-9-20></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ResetAll</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-9-21><a id=__codelineno-9-21 name=__codelineno-9-21></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Setup group at top, properties in middle, Maintenance group at bottom" src=../../../images/inspector/buttons/inspector-button-group-placement.png></p> <p><strong>Important:</strong> Like <code>groupPriority</code>, the first declared button in a group sets the canonical placement for the entire group. Conflicting values from other buttons in the same group are ignored with a warning.</p> <hr> <h3 id=combining-grouppriority-and-groupplacement>Combining groupPriority and groupPlacement<a class=headerlink href=#combining-grouppriority-and-groupplacement title="Permanent link">&para;</a></h3> <p>Use both parameters together for fine-grained control:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-10-1> 1</a></span>
<span class=normal><a href=#__codelineno-10-2> 2</a></span>
<span class=normal><a href=#__codelineno-10-3> 3</a></span>
<span class=normal><a href=#__codelineno-10-4> 4</a></span>
<span class=normal><a href=#__codelineno-10-5> 5</a></span>
<span class=normal><a href=#__codelineno-10-6> 6</a></span>
<span class=normal><a href=#__codelineno-10-7> 7</a></span>
<span class=normal><a href=#__codelineno-10-8> 8</a></span>
<span class=normal><a href=#__codelineno-10-9> 9</a></span>
<span class=normal><a href=#__codelineno-10-10>10</a></span>
<span class=normal><a href=#__codelineno-10-11>11</a></span>
<span class=normal><a href=#__codelineno-10-12>12</a></span>
<span class=normal><a href=#__codelineno-10-13>13</a></span>
<span class=normal><a href=#__codelineno-10-14>14</a></span>
<span class=normal><a href=#__codelineno-10-15>15</a></span>
<span class=normal><a href=#__codelineno-10-16>16</a></span>
<span class=normal><a href=#__codelineno-10-17>17</a></span>
<span class=normal><a href=#__codelineno-10-18>18</a></span>
<span class=normal><a href=#__codelineno-10-19>19</a></span>
<span class=normal><a href=#__codelineno-10-20>20</a></span>
<span class=normal><a href=#__codelineno-10-21>21</a></span>
<span class=normal><a href=#__codelineno-10-22>22</a></span>
<span class=normal><a href=#__codelineno-10-23>23</a></span>
<span class=normal><a href=#__codelineno-10-24>24</a></span>
<span class=normal><a href=#__codelineno-10-25>25</a></span>
<span class=normal><a href=#__codelineno-10-26>26</a></span>
<span class=normal><a href=#__codelineno-10-27>27</a></span>
<span class=normal><a href=#__codelineno-10-28>28</a></span>
<span class=normal><a href=#__codelineno-10-29>29</a></span>
<span class=normal><a href=#__codelineno-10-30>30</a></span>
<span class=normal><a href=#__codelineno-10-31>31</a></span>
<span class=normal><a href=#__codelineno-10-32>32</a></span>
<span class=normal><a href=#__codelineno-10-33>33</a></span>
<span class=normal><a href=#__codelineno-10-34>34</a></span>
<span class=normal><a href=#__codelineno-10-35>35</a></span>
<span class=normal><a href=#__codelineno-10-36>36</a></span>
<span class=normal><a href=#__codelineno-10-37>37</a></span>
<span class=normal><a href=#__codelineno-10-38>38</a></span>
<span class=normal><a href=#__codelineno-10-39>39</a></span>
<span class=normal><a href=#__codelineno-10-40>40</a></span>
<span class=normal><a href=#__codelineno-10-41>41</a></span>
<span class=normal><a href=#__codelineno-10-42>42</a></span>
<span class=normal><a href=#__codelineno-10-43>43</a></span>
<span class=normal><a href=#__codelineno-10-44>44</a></span>
<span class=normal><a href=#__codelineno-10-45>45</a></span>
<span class=normal><a href=#__codelineno-10-46>46</a></span>
<span class=normal><a href=#__codelineno-10-47>47</a></span>
<span class=normal><a href=#__codelineno-10-48>48</a></span>
<span class=normal><a href=#__codelineno-10-49>49</a></span>
<span class=normal><a href=#__codelineno-10-50>50</a></span>
<span class=normal><a href=#__codelineno-10-51>51</a></span>
<span class=normal><a href=#__codelineno-10-52>52</a></span>
<span class=normal><a href=#__codelineno-10-53>53</a></span>
<span class=normal><a href=#__codelineno-10-54>54</a></span>
<span class=normal><a href=#__codelineno-10-55>55</a></span>
<span class=normal><a href=#__codelineno-10-56>56</a></span>
<span class=normal><a href=#__codelineno-10-57>57</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-10-1><a id=__codelineno-10-1 name=__codelineno-10-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-10-2><a id=__codelineno-10-2 name=__codelineno-10-2></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-10-3><a id=__codelineno-10-3 name=__codelineno-10-3></a>
</span><span id=__span-10-4><a id=__codelineno-10-4 name=__codelineno-10-4></a><span class=na>[CreateAssetMenu(</span>
</span><span id=__span-10-5><a id=__codelineno-10-5 name=__codelineno-10-5></a><span class=na>    fileName = &quot;AdvancedButtonLayout&quot;,</span>
</span><span id=__span-10-6><a id=__codelineno-10-6 name=__codelineno-10-6></a><span class=na>    menuName = &quot;Wallstop Studios/Advanced Button Layout&quot;</span>
</span><span id=__span-10-7><a id=__codelineno-10-7 name=__codelineno-10-7></a><span class=na>)]</span>
</span><span id=__span-10-8><a id=__codelineno-10-8 name=__codelineno-10-8></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AdvancedButtonLayout</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>ScriptableObject</span>
</span><span id=__span-10-9><a id=__codelineno-10-9 name=__codelineno-10-9></a><span class=p>{</span>
</span><span id=__span-10-10><a id=__codelineno-10-10 name=__codelineno-10-10></a><span class=w>    </span><span class=c1>// TOP SECTION - ordered by priority</span>
</span><span id=__span-10-11><a id=__codelineno-10-11 name=__codelineno-10-11></a><span class=w>    </span><span class=na>[WButton(</span>
</span><span id=__span-10-12><a id=__codelineno-10-12 name=__codelineno-10-12></a><span class=na>        &quot;Validate Data&quot;,</span>
</span><span id=__span-10-13><a id=__codelineno-10-13 name=__codelineno-10-13></a><span class=na>        groupName: &quot;Validation&quot;,</span>
</span><span id=__span-10-14><a id=__codelineno-10-14 name=__codelineno-10-14></a><span class=na>        groupPriority: 1,</span>
</span><span id=__span-10-15><a id=__codelineno-10-15 name=__codelineno-10-15></a><span class=na>        groupPlacement: WButtonGroupPlacement.Top</span>
</span><span id=__span-10-16><a id=__codelineno-10-16 name=__codelineno-10-16></a><span class=na>    )]</span>
</span><span id=__span-10-17><a id=__codelineno-10-17 name=__codelineno-10-17></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ValidateData</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-10-18><a id=__codelineno-10-18 name=__codelineno-10-18></a>
</span><span id=__span-10-19><a id=__codelineno-10-19 name=__codelineno-10-19></a><span class=w>    </span><span class=na>[WButton(</span>
</span><span id=__span-10-20><a id=__codelineno-10-20 name=__codelineno-10-20></a><span class=na>        &quot;Generate IDs&quot;,</span>
</span><span id=__span-10-21><a id=__codelineno-10-21 name=__codelineno-10-21></a><span class=na>        groupName: &quot;Authoring&quot;,</span>
</span><span id=__span-10-22><a id=__codelineno-10-22 name=__codelineno-10-22></a><span class=na>        groupPriority: 0,</span>
</span><span id=__span-10-23><a id=__codelineno-10-23 name=__codelineno-10-23></a><span class=na>        groupPlacement: WButtonGroupPlacement.Top</span>
</span><span id=__span-10-24><a id=__codelineno-10-24 name=__codelineno-10-24></a><span class=na>    )]</span>
</span><span id=__span-10-25><a id=__codelineno-10-25 name=__codelineno-10-25></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>GenerateIds</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-10-26><a id=__codelineno-10-26 name=__codelineno-10-26></a>
</span><span id=__span-10-27><a id=__codelineno-10-27 name=__codelineno-10-27></a><span class=w>    </span><span class=c1>// Properties appear here</span>
</span><span id=__span-10-28><a id=__codelineno-10-28 name=__codelineno-10-28></a>
</span><span id=__span-10-29><a id=__codelineno-10-29 name=__codelineno-10-29></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>property1</span><span class=p>;</span>
</span><span id=__span-10-30><a id=__codelineno-10-30 name=__codelineno-10-30></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=n>property2</span><span class=p>;</span>
</span><span id=__span-10-31><a id=__codelineno-10-31 name=__codelineno-10-31></a>
</span><span id=__span-10-32><a id=__codelineno-10-32 name=__codelineno-10-32></a><span class=w>    </span><span class=c1>// BOTTOM SECTION - ordered by priority</span>
</span><span id=__span-10-33><a id=__codelineno-10-33 name=__codelineno-10-33></a>
</span><span id=__span-10-34><a id=__codelineno-10-34 name=__codelineno-10-34></a><span class=w>    </span><span class=na>[WButton(</span>
</span><span id=__span-10-35><a id=__codelineno-10-35 name=__codelineno-10-35></a><span class=na>        &quot;Submit to Server&quot;,</span>
</span><span id=__span-10-36><a id=__codelineno-10-36 name=__codelineno-10-36></a><span class=na>        groupName: &quot;Network&quot;,</span>
</span><span id=__span-10-37><a id=__codelineno-10-37 name=__codelineno-10-37></a><span class=na>        groupPriority: 10,</span>
</span><span id=__span-10-38><a id=__codelineno-10-38 name=__codelineno-10-38></a><span class=na>        groupPlacement: WButtonGroupPlacement.Bottom</span>
</span><span id=__span-10-39><a id=__codelineno-10-39 name=__codelineno-10-39></a><span class=na>    )]</span>
</span><span id=__span-10-40><a id=__codelineno-10-40 name=__codelineno-10-40></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Submit</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-10-41><a id=__codelineno-10-41 name=__codelineno-10-41></a>
</span><span id=__span-10-42><a id=__codelineno-10-42 name=__codelineno-10-42></a><span class=w>    </span><span class=na>[WButton(</span>
</span><span id=__span-10-43><a id=__codelineno-10-43 name=__codelineno-10-43></a><span class=na>        &quot;Export&quot;,</span>
</span><span id=__span-10-44><a id=__codelineno-10-44 name=__codelineno-10-44></a><span class=na>        groupName: &quot;IO&quot;,</span>
</span><span id=__span-10-45><a id=__codelineno-10-45 name=__codelineno-10-45></a><span class=na>        groupPriority: 0,</span>
</span><span id=__span-10-46><a id=__codelineno-10-46 name=__codelineno-10-46></a><span class=na>        groupPlacement: WButtonGroupPlacement.Bottom</span>
</span><span id=__span-10-47><a id=__codelineno-10-47 name=__codelineno-10-47></a><span class=na>    )]</span>
</span><span id=__span-10-48><a id=__codelineno-10-48 name=__codelineno-10-48></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Export</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-10-49><a id=__codelineno-10-49 name=__codelineno-10-49></a>
</span><span id=__span-10-50><a id=__codelineno-10-50 name=__codelineno-10-50></a><span class=w>    </span><span class=na>[WButton(</span>
</span><span id=__span-10-51><a id=__codelineno-10-51 name=__codelineno-10-51></a><span class=na>        &quot;Import&quot;,</span>
</span><span id=__span-10-52><a id=__codelineno-10-52 name=__codelineno-10-52></a><span class=na>        groupName: &quot;IO&quot;,</span>
</span><span id=__span-10-53><a id=__codelineno-10-53 name=__codelineno-10-53></a><span class=na>        groupPriority: 0,</span>
</span><span id=__span-10-54><a id=__codelineno-10-54 name=__codelineno-10-54></a><span class=na>        groupPlacement: WButtonGroupPlacement.Bottom</span>
</span><span id=__span-10-55><a id=__codelineno-10-55 name=__codelineno-10-55></a><span class=na>    )]</span>
</span><span id=__span-10-56><a id=__codelineno-10-56 name=__codelineno-10-56></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Import</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-10-57><a id=__codelineno-10-57 name=__codelineno-10-57></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Advanced layout: Authoring then Validation at top, IO then Network at bottom" src=../../../images/inspector/buttons/inspector-button-advanced-layout.png></p> <p><strong>Rendering Order:</strong></p> <ol> <li><strong>Top Section</strong> (sorted by <code>groupPriority</code>):</li> <li>Authoring (priority 0)</li> <li>Validation (priority 1)</li> <li><strong>Default Inspector Properties</strong></li> <li><strong>Bottom Section</strong> (sorted by <code>groupPriority</code>):</li> <li>IO (priority 0)</li> <li>Network (priority 10)</li> </ol> <hr> <h3 id=complete-example>Complete Example<a class=headerlink href=#complete-example title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-11-1> 1</a></span>
<span class=normal><a href=#__codelineno-11-2> 2</a></span>
<span class=normal><a href=#__codelineno-11-3> 3</a></span>
<span class=normal><a href=#__codelineno-11-4> 4</a></span>
<span class=normal><a href=#__codelineno-11-5> 5</a></span>
<span class=normal><a href=#__codelineno-11-6> 6</a></span>
<span class=normal><a href=#__codelineno-11-7> 7</a></span>
<span class=normal><a href=#__codelineno-11-8> 8</a></span>
<span class=normal><a href=#__codelineno-11-9> 9</a></span>
<span class=normal><a href=#__codelineno-11-10>10</a></span>
<span class=normal><a href=#__codelineno-11-11>11</a></span>
<span class=normal><a href=#__codelineno-11-12>12</a></span>
<span class=normal><a href=#__codelineno-11-13>13</a></span>
<span class=normal><a href=#__codelineno-11-14>14</a></span>
<span class=normal><a href=#__codelineno-11-15>15</a></span>
<span class=normal><a href=#__codelineno-11-16>16</a></span>
<span class=normal><a href=#__codelineno-11-17>17</a></span>
<span class=normal><a href=#__codelineno-11-18>18</a></span>
<span class=normal><a href=#__codelineno-11-19>19</a></span>
<span class=normal><a href=#__codelineno-11-20>20</a></span>
<span class=normal><a href=#__codelineno-11-21>21</a></span>
<span class=normal><a href=#__codelineno-11-22>22</a></span>
<span class=normal><a href=#__codelineno-11-23>23</a></span>
<span class=normal><a href=#__codelineno-11-24>24</a></span>
<span class=normal><a href=#__codelineno-11-25>25</a></span>
<span class=normal><a href=#__codelineno-11-26>26</a></span>
<span class=normal><a href=#__codelineno-11-27>27</a></span>
<span class=normal><a href=#__codelineno-11-28>28</a></span>
<span class=normal><a href=#__codelineno-11-29>29</a></span>
<span class=normal><a href=#__codelineno-11-30>30</a></span>
<span class=normal><a href=#__codelineno-11-31>31</a></span>
<span class=normal><a href=#__codelineno-11-32>32</a></span>
<span class=normal><a href=#__codelineno-11-33>33</a></span>
<span class=normal><a href=#__codelineno-11-34>34</a></span>
<span class=normal><a href=#__codelineno-11-35>35</a></span>
<span class=normal><a href=#__codelineno-11-36>36</a></span>
<span class=normal><a href=#__codelineno-11-37>37</a></span>
<span class=normal><a href=#__codelineno-11-38>38</a></span>
<span class=normal><a href=#__codelineno-11-39>39</a></span>
<span class=normal><a href=#__codelineno-11-40>40</a></span>
<span class=normal><a href=#__codelineno-11-41>41</a></span>
<span class=normal><a href=#__codelineno-11-42>42</a></span>
<span class=normal><a href=#__codelineno-11-43>43</a></span>
<span class=normal><a href=#__codelineno-11-44>44</a></span>
<span class=normal><a href=#__codelineno-11-45>45</a></span>
<span class=normal><a href=#__codelineno-11-46>46</a></span>
<span class=normal><a href=#__codelineno-11-47>47</a></span>
<span class=normal><a href=#__codelineno-11-48>48</a></span>
<span class=normal><a href=#__codelineno-11-49>49</a></span>
<span class=normal><a href=#__codelineno-11-50>50</a></span>
<span class=normal><a href=#__codelineno-11-51>51</a></span>
<span class=normal><a href=#__codelineno-11-52>52</a></span>
<span class=normal><a href=#__codelineno-11-53>53</a></span>
<span class=normal><a href=#__codelineno-11-54>54</a></span>
<span class=normal><a href=#__codelineno-11-55>55</a></span>
<span class=normal><a href=#__codelineno-11-56>56</a></span>
<span class=normal><a href=#__codelineno-11-57>57</a></span>
<span class=normal><a href=#__codelineno-11-58>58</a></span>
<span class=normal><a href=#__codelineno-11-59>59</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-11-1><a id=__codelineno-11-1 name=__codelineno-11-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-11-2><a id=__codelineno-11-2 name=__codelineno-11-2></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-11-3><a id=__codelineno-11-3 name=__codelineno-11-3></a>
</span><span id=__span-11-4><a id=__codelineno-11-4 name=__codelineno-11-4></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>LevelManager</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-11-5><a id=__codelineno-11-5 name=__codelineno-11-5></a><span class=p>{</span>
</span><span id=__span-11-6><a id=__codelineno-11-6 name=__codelineno-11-6></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>currentLevel</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>1</span><span class=p>;</span>
</span><span id=__span-11-7><a id=__codelineno-11-7 name=__codelineno-11-7></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=n>debugMode</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>false</span><span class=p>;</span>
</span><span id=__span-11-8><a id=__codelineno-11-8 name=__codelineno-11-8></a>
</span><span id=__span-11-9><a id=__codelineno-11-9 name=__codelineno-11-9></a><span class=w>    </span><span class=c1>// Setup group - explicitly placed at top, renders first due to groupPriority: 0</span>
</span><span id=__span-11-10><a id=__codelineno-11-10 name=__codelineno-11-10></a><span class=w>    </span><span class=na>[WButton(&quot;Initialize Level&quot;, groupName: &quot;Setup&quot;, groupPriority: 0, groupPlacement: WButtonGroupPlacement.Top)]</span>
</span><span id=__span-11-11><a id=__codelineno-11-11 name=__codelineno-11-11></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Initialize</span><span class=p>()</span>
</span><span id=__span-11-12><a id=__codelineno-11-12 name=__codelineno-11-12></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-13><a id=__codelineno-11-13 name=__codelineno-11-13></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Level initialized!&quot;</span><span class=p>);</span>
</span><span id=__span-11-14><a id=__codelineno-11-14 name=__codelineno-11-14></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-15><a id=__codelineno-11-15 name=__codelineno-11-15></a>
</span><span id=__span-11-16><a id=__codelineno-11-16 name=__codelineno-11-16></a><span class=w>    </span><span class=na>[WButton(&quot;✓ Validate Configuration&quot;, groupName: &quot;Setup&quot;)]</span>
</span><span id=__span-11-17><a id=__codelineno-11-17 name=__codelineno-11-17></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ValidateConfig</span><span class=p>()</span>
</span><span id=__span-11-18><a id=__codelineno-11-18 name=__codelineno-11-18></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-19><a id=__codelineno-11-19 name=__codelineno-11-19></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Configuration valid!&quot;</span><span class=p>);</span>
</span><span id=__span-11-20><a id=__codelineno-11-20 name=__codelineno-11-20></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-21><a id=__codelineno-11-21 name=__codelineno-11-21></a>
</span><span id=__span-11-22><a id=__codelineno-11-22 name=__codelineno-11-22></a><span class=w>    </span><span class=c1>// Debug group - explicitly placed at top, renders second due to groupPriority: 1</span>
</span><span id=__span-11-23><a id=__codelineno-11-23 name=__codelineno-11-23></a><span class=w>    </span><span class=na>[WButton(&quot;Roll Dice&quot;, historyCapacity: 10, groupName: &quot;Debug&quot;, groupPriority: 1, groupPlacement: WButtonGroupPlacement.Top)]</span>
</span><span id=__span-11-24><a id=__codelineno-11-24 name=__codelineno-11-24></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>RollDice</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1</span><span class=p>,</span><span class=w> </span><span class=mi>7</span><span class=p>);</span>
</span><span id=__span-11-25><a id=__codelineno-11-25 name=__codelineno-11-25></a>
</span><span id=__span-11-26><a id=__codelineno-11-26 name=__codelineno-11-26></a><span class=w>    </span><span class=na>[WButton(&quot;🎯 Spawn Test Enemy&quot;, colorKey: &quot;Warning&quot;, groupName: &quot;Debug&quot;)]</span>
</span><span id=__span-11-27><a id=__codelineno-11-27 name=__codelineno-11-27></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnTestEnemy</span><span class=p>()</span>
</span><span id=__span-11-28><a id=__codelineno-11-28 name=__codelineno-11-28></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-29><a id=__codelineno-11-29 name=__codelineno-11-29></a><span class=w>        </span><span class=c1>// Spawn logic here</span>
</span><span id=__span-11-30><a id=__codelineno-11-30 name=__codelineno-11-30></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-31><a id=__codelineno-11-31 name=__codelineno-11-31></a>
</span><span id=__span-11-32><a id=__codelineno-11-32 name=__codelineno-11-32></a><span class=w>    </span><span class=c1>// Properties appear here in the inspector</span>
</span><span id=__span-11-33><a id=__codelineno-11-33 name=__codelineno-11-33></a>
</span><span id=__span-11-34><a id=__codelineno-11-34 name=__codelineno-11-34></a><span class=w>    </span><span class=c1>// Actions group - explicitly placed at bottom, renders first in bottom section due to groupPriority: 0</span>
</span><span id=__span-11-35><a id=__codelineno-11-35 name=__codelineno-11-35></a><span class=w>    </span><span class=na>[WButton(&quot;▶ Start Level&quot;, colorKey: &quot;Success&quot;, groupName: &quot;Actions&quot;, groupPriority: 0, groupPlacement: WButtonGroupPlacement.Bottom)]</span>
</span><span id=__span-11-36><a id=__codelineno-11-36 name=__codelineno-11-36></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>StartLevel</span><span class=p>()</span>
</span><span id=__span-11-37><a id=__codelineno-11-37 name=__codelineno-11-37></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-38><a id=__codelineno-11-38 name=__codelineno-11-38></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Starting level {currentLevel}...&quot;</span><span class=p>);</span>
</span><span id=__span-11-39><a id=__codelineno-11-39 name=__codelineno-11-39></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-40><a id=__codelineno-11-40 name=__codelineno-11-40></a>
</span><span id=__span-11-41><a id=__codelineno-11-41 name=__codelineno-11-41></a><span class=w>    </span><span class=na>[WButton(&quot;⏸ Pause Game&quot;, groupName: &quot;Actions&quot;)]</span>
</span><span id=__span-11-42><a id=__codelineno-11-42 name=__codelineno-11-42></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>PauseGame</span><span class=p>()</span>
</span><span id=__span-11-43><a id=__codelineno-11-43 name=__codelineno-11-43></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-44><a id=__codelineno-11-44 name=__codelineno-11-44></a><span class=w>        </span><span class=n>Time</span><span class=p>.</span><span class=n>timeScale</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mf>0f</span><span class=p>;</span>
</span><span id=__span-11-45><a id=__codelineno-11-45 name=__codelineno-11-45></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-46><a id=__codelineno-11-46 name=__codelineno-11-46></a>
</span><span id=__span-11-47><a id=__codelineno-11-47 name=__codelineno-11-47></a><span class=w>    </span><span class=na>[WButton(&quot;🔄 Restart Level&quot;, colorKey: &quot;Danger&quot;, groupName: &quot;Actions&quot;)]</span>
</span><span id=__span-11-48><a id=__codelineno-11-48 name=__codelineno-11-48></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RestartLevel</span><span class=p>()</span>
</span><span id=__span-11-49><a id=__codelineno-11-49 name=__codelineno-11-49></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-50><a id=__codelineno-11-50 name=__codelineno-11-50></a><span class=w>        </span><span class=c1>// Restart logic here</span>
</span><span id=__span-11-51><a id=__codelineno-11-51 name=__codelineno-11-51></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-52><a id=__codelineno-11-52 name=__codelineno-11-52></a>
</span><span id=__span-11-53><a id=__codelineno-11-53 name=__codelineno-11-53></a><span class=w>    </span><span class=c1>// Maintenance group - explicitly placed at bottom, renders last in bottom section due to groupPriority: 10</span>
</span><span id=__span-11-54><a id=__codelineno-11-54 name=__codelineno-11-54></a><span class=w>    </span><span class=na>[WButton(&quot;Clear Cache&quot;, historyCapacity: 1, groupName: &quot;Maintenance&quot;, groupPriority: 10, groupPlacement: WButtonGroupPlacement.Bottom)]</span>
</span><span id=__span-11-55><a id=__codelineno-11-55 name=__codelineno-11-55></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=nf>ClearCache</span><span class=p>()</span>
</span><span id=__span-11-56><a id=__codelineno-11-56 name=__codelineno-11-56></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-11-57><a id=__codelineno-11-57 name=__codelineno-11-57></a><span class=w>        </span><span class=k>return</span><span class=w> </span><span class=s>$&quot;Cache cleared at {System.DateTime.Now:HH:mm:ss}&quot;</span><span class=p>;</span>
</span><span id=__span-11-58><a id=__codelineno-11-58 name=__codelineno-11-58></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-11-59><a id=__codelineno-11-59 name=__codelineno-11-59></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Full inspector showing all parameter features working together" src=../../../images/inspector/buttons/inspector-button-complete-example.png></p> <hr> <h2 id=execution-types>Execution Types<a class=headerlink href=#execution-types title="Permanent link">&para;</a></h2> <p>WButton supports four method signatures:</p> <h3 id=1-void-methods-immediate>1. Void Methods (Immediate)<a class=headerlink href=#1-void-methods-immediate title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-12-1>1</a></span>
<span class=normal><a href=#__codelineno-12-2>2</a></span>
<span class=normal><a href=#__codelineno-12-3>3</a></span>
<span class=normal><a href=#__codelineno-12-4>4</a></span>
<span class=normal><a href=#__codelineno-12-5>5</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-12-1><a id=__codelineno-12-1 name=__codelineno-12-1></a><span class=na>[WButton(&quot;Log Message&quot;)]</span>
</span><span id=__span-12-2><a id=__codelineno-12-2 name=__codelineno-12-2></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LogMessage</span><span class=p>()</span>
</span><span id=__span-12-3><a id=__codelineno-12-3 name=__codelineno-12-3></a><span class=p>{</span>
</span><span id=__span-12-4><a id=__codelineno-12-4 name=__codelineno-12-4></a><span class=w>    </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Button clicked!&quot;</span><span class=p>);</span>
</span><span id=__span-12-5><a id=__codelineno-12-5 name=__codelineno-12-5></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><strong>Behavior:</strong> Executes immediately, no return value shown</p> <hr> <h3 id=2-returning-values-with-history>2. Returning Values (With History)<a class=headerlink href=#2-returning-values-with-history title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-13-1> 1</a></span>
<span class=normal><a href=#__codelineno-13-2> 2</a></span>
<span class=normal><a href=#__codelineno-13-3> 3</a></span>
<span class=normal><a href=#__codelineno-13-4> 4</a></span>
<span class=normal><a href=#__codelineno-13-5> 5</a></span>
<span class=normal><a href=#__codelineno-13-6> 6</a></span>
<span class=normal><a href=#__codelineno-13-7> 7</a></span>
<span class=normal><a href=#__codelineno-13-8> 8</a></span>
<span class=normal><a href=#__codelineno-13-9> 9</a></span>
<span class=normal><a href=#__codelineno-13-10>10</a></span>
<span class=normal><a href=#__codelineno-13-11>11</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-13-1><a id=__codelineno-13-1 name=__codelineno-13-1></a><span class=na>[WButton(&quot;Roll Dice&quot;, historyCapacity: 10, groupName: &quot;Debug&quot;)]</span>
</span><span id=__span-13-2><a id=__codelineno-13-2 name=__codelineno-13-2></a><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>RollDice</span><span class=p>()</span>
</span><span id=__span-13-3><a id=__codelineno-13-3 name=__codelineno-13-3></a><span class=p>{</span>
</span><span id=__span-13-4><a id=__codelineno-13-4 name=__codelineno-13-4></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1</span><span class=p>,</span><span class=w> </span><span class=mi>7</span><span class=p>);</span>
</span><span id=__span-13-5><a id=__codelineno-13-5 name=__codelineno-13-5></a><span class=p>}</span>
</span><span id=__span-13-6><a id=__codelineno-13-6 name=__codelineno-13-6></a>
</span><span id=__span-13-7><a id=__codelineno-13-7 name=__codelineno-13-7></a><span class=na>[WButton(&quot;Get Position&quot;)]</span>
</span><span id=__span-13-8><a id=__codelineno-13-8 name=__codelineno-13-8></a><span class=k>private</span><span class=w> </span><span class=n>Vector3</span><span class=w> </span><span class=nf>GetPlayerPosition</span><span class=p>()</span>
</span><span id=__span-13-9><a id=__codelineno-13-9 name=__codelineno-13-9></a><span class=p>{</span>
</span><span id=__span-13-10><a id=__codelineno-13-10 name=__codelineno-13-10></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=n>transform</span><span class=p>.</span><span class=n>position</span><span class=p>;</span>
</span><span id=__span-13-11><a id=__codelineno-13-11 name=__codelineno-13-11></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Button with result history showing multiple dice rolls: 4, 2, 6, 1, 5" src=../../../images/inspector/buttons/history-dice-rolls-2.png></p> <p><img alt='Clicking "Roll Dice" and seeing new result added to history' src=../../../images/inspector/buttons/roll-dice-more-history.gif></p> <p><strong>Behavior:</strong> Shows return value in a collapsible history panel</p> <hr> <h3 id=3-coroutines-ienumerator>3. Coroutines (IEnumerator)<a class=headerlink href=#3-coroutines-ienumerator title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-14-1> 1</a></span>
<span class=normal><a href=#__codelineno-14-2> 2</a></span>
<span class=normal><a href=#__codelineno-14-3> 3</a></span>
<span class=normal><a href=#__codelineno-14-4> 4</a></span>
<span class=normal><a href=#__codelineno-14-5> 5</a></span>
<span class=normal><a href=#__codelineno-14-6> 6</a></span>
<span class=normal><a href=#__codelineno-14-7> 7</a></span>
<span class=normal><a href=#__codelineno-14-8> 8</a></span>
<span class=normal><a href=#__codelineno-14-9> 9</a></span>
<span class=normal><a href=#__codelineno-14-10>10</a></span>
<span class=normal><a href=#__codelineno-14-11>11</a></span>
<span class=normal><a href=#__codelineno-14-12>12</a></span>
<span class=normal><a href=#__codelineno-14-13>13</a></span>
<span class=normal><a href=#__codelineno-14-14>14</a></span>
<span class=normal><a href=#__codelineno-14-15>15</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-14-1><a id=__codelineno-14-1 name=__codelineno-14-1></a><span class=na>[WButton(&quot;Fade Out&quot;)]</span>
</span><span id=__span-14-2><a id=__codelineno-14-2 name=__codelineno-14-2></a><span class=k>private</span><span class=w> </span><span class=n>IEnumerator</span><span class=w> </span><span class=nf>FadeOut</span><span class=p>()</span>
</span><span id=__span-14-3><a id=__codelineno-14-3 name=__codelineno-14-3></a><span class=p>{</span>
</span><span id=__span-14-4><a id=__codelineno-14-4 name=__codelineno-14-4></a><span class=w>    </span><span class=n>SpriteRenderer</span><span class=w> </span><span class=n>sprite</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>GetComponent</span><span class=o>&lt;</span><span class=n>SpriteRenderer</span><span class=o>&gt;</span><span class=p>();</span>
</span><span id=__span-14-5><a id=__codelineno-14-5 name=__codelineno-14-5></a><span class=w>    </span><span class=n>Color</span><span class=w> </span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>sprite</span><span class=p>.</span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-14-6><a id=__codelineno-14-6 name=__codelineno-14-6></a>
</span><span id=__span-14-7><a id=__codelineno-14-7 name=__codelineno-14-7></a><span class=w>    </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>float</span><span class=w> </span><span class=n>t</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mf>1f</span><span class=p>;</span><span class=w> </span><span class=n>t</span><span class=w> </span><span class=o>&gt;=</span><span class=w> </span><span class=mf>0f</span><span class=p>;</span><span class=w> </span><span class=n>t</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>Time</span><span class=p>.</span><span class=n>deltaTime</span><span class=p>)</span>
</span><span id=__span-14-8><a id=__codelineno-14-8 name=__codelineno-14-8></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-14-9><a id=__codelineno-14-9 name=__codelineno-14-9></a><span class=w>        </span><span class=n>color</span><span class=p>.</span><span class=n>a</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>t</span><span class=p>;</span>
</span><span id=__span-14-10><a id=__codelineno-14-10 name=__codelineno-14-10></a><span class=w>        </span><span class=n>sprite</span><span class=p>.</span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-14-11><a id=__codelineno-14-11 name=__codelineno-14-11></a><span class=w>        </span><span class=k>yield</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>null</span><span class=p>;</span>
</span><span id=__span-14-12><a id=__codelineno-14-12 name=__codelineno-14-12></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-14-13><a id=__codelineno-14-13 name=__codelineno-14-13></a>
</span><span id=__span-14-14><a id=__codelineno-14-14 name=__codelineno-14-14></a><span class=w>    </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Fade complete!&quot;</span><span class=p>);</span>
</span><span id=__span-14-15><a id=__codelineno-14-15 name=__codelineno-14-15></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt='Button showing spinner while coroutine executes, then "Complete" status' src=../../../images/inspector/buttons/enumerator-fade.gif></p> <p><strong>Behavior:</strong></p> <ul> <li>Shows "Running..." status</li> <li>Spinner animation during execution</li> <li>"Complete" message when finished</li> </ul> <hr> <h3 id=4-async-methods-task-valuetask>4. Async Methods (Task / ValueTask)<a class=headerlink href=#4-async-methods-task-valuetask title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-15-1> 1</a></span>
<span class=normal><a href=#__codelineno-15-2> 2</a></span>
<span class=normal><a href=#__codelineno-15-3> 3</a></span>
<span class=normal><a href=#__codelineno-15-4> 4</a></span>
<span class=normal><a href=#__codelineno-15-5> 5</a></span>
<span class=normal><a href=#__codelineno-15-6> 6</a></span>
<span class=normal><a href=#__codelineno-15-7> 7</a></span>
<span class=normal><a href=#__codelineno-15-8> 8</a></span>
<span class=normal><a href=#__codelineno-15-9> 9</a></span>
<span class=normal><a href=#__codelineno-15-10>10</a></span>
<span class=normal><a href=#__codelineno-15-11>11</a></span>
<span class=normal><a href=#__codelineno-15-12>12</a></span>
<span class=normal><a href=#__codelineno-15-13>13</a></span>
<span class=normal><a href=#__codelineno-15-14>14</a></span>
<span class=normal><a href=#__codelineno-15-15>15</a></span>
<span class=normal><a href=#__codelineno-15-16>16</a></span>
<span class=normal><a href=#__codelineno-15-17>17</a></span>
<span class=normal><a href=#__codelineno-15-18>18</a></span>
<span class=normal><a href=#__codelineno-15-19>19</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-15-1><a id=__codelineno-15-1 name=__codelineno-15-1></a><span class=k>using</span><span class=w> </span><span class=nn>System.Threading</span><span class=p>;</span>
</span><span id=__span-15-2><a id=__codelineno-15-2 name=__codelineno-15-2></a><span class=k>using</span><span class=w> </span><span class=nn>System.Threading.Tasks</span><span class=p>;</span>
</span><span id=__span-15-3><a id=__codelineno-15-3 name=__codelineno-15-3></a>
</span><span id=__span-15-4><a id=__codelineno-15-4 name=__codelineno-15-4></a><span class=na>[WButton(&quot;Load Data&quot;)]</span>
</span><span id=__span-15-5><a id=__codelineno-15-5 name=__codelineno-15-5></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=o>&lt;</span><span class=kt>string</span><span class=o>&gt;</span><span class=w> </span><span class=n>LoadDataAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-15-6><a id=__codelineno-15-6 name=__codelineno-15-6></a><span class=p>{</span>
</span><span id=__span-15-7><a id=__codelineno-15-7 name=__codelineno-15-7></a><span class=w>    </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Loading...&quot;</span><span class=p>);</span>
</span><span id=__span-15-8><a id=__codelineno-15-8 name=__codelineno-15-8></a><span class=w>    </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>2000</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span><span class=w>  </span><span class=c1>// Simulate async work</span>
</span><span id=__span-15-9><a id=__codelineno-15-9 name=__codelineno-15-9></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=s>&quot;Data loaded successfully!&quot;</span><span class=p>;</span>
</span><span id=__span-15-10><a id=__codelineno-15-10 name=__codelineno-15-10></a><span class=p>}</span>
</span><span id=__span-15-11><a id=__codelineno-15-11 name=__codelineno-15-11></a>
</span><span id=__span-15-12><a id=__codelineno-15-12 name=__codelineno-15-12></a><span class=na>[WButton(&quot;Download Asset&quot;)]</span>
</span><span id=__span-15-13><a id=__codelineno-15-13 name=__codelineno-15-13></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>ValueTask</span><span class=o>&lt;</span><span class=n>Texture2D</span><span class=o>&gt;</span><span class=w> </span><span class=n>DownloadAssetAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-15-14><a id=__codelineno-15-14 name=__codelineno-15-14></a><span class=p>{</span>
</span><span id=__span-15-15><a id=__codelineno-15-15 name=__codelineno-15-15></a><span class=w>    </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Downloading...&quot;</span><span class=p>);</span>
</span><span id=__span-15-16><a id=__codelineno-15-16 name=__codelineno-15-16></a><span class=w>    </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>1000</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span>
</span><span id=__span-15-17><a id=__codelineno-15-17 name=__codelineno-15-17></a><span class=w>    </span><span class=c1>// Simulate download</span>
</span><span id=__span-15-18><a id=__codelineno-15-18 name=__codelineno-15-18></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=nf>Texture2D</span><span class=p>(</span><span class=mi>256</span><span class=p>,</span><span class=w> </span><span class=mi>256</span><span class=p>);</span>
</span><span id=__span-15-19><a id=__codelineno-15-19 name=__codelineno-15-19></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Clicking button, showing spinner, then result appearing" src=../../../images/inspector/buttons/async-buttons-with-cancellation.gif></p> <p><strong>Behavior:</strong></p> <ul> <li>Automatic <code>CancellationToken</code> injection (optional parameter)</li> <li>"Cancel" button appears during execution</li> <li>Result shown in history when complete</li> <li>Exceptions logged to console</li> </ul> <p><strong>Cancellation Example:</strong></p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-16-1> 1</a></span>
<span class=normal><a href=#__codelineno-16-2> 2</a></span>
<span class=normal><a href=#__codelineno-16-3> 3</a></span>
<span class=normal><a href=#__codelineno-16-4> 4</a></span>
<span class=normal><a href=#__codelineno-16-5> 5</a></span>
<span class=normal><a href=#__codelineno-16-6> 6</a></span>
<span class=normal><a href=#__codelineno-16-7> 7</a></span>
<span class=normal><a href=#__codelineno-16-8> 8</a></span>
<span class=normal><a href=#__codelineno-16-9> 9</a></span>
<span class=normal><a href=#__codelineno-16-10>10</a></span>
<span class=normal><a href=#__codelineno-16-11>11</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-16-1><a id=__codelineno-16-1 name=__codelineno-16-1></a><span class=na>[WButton(&quot;Long Operation&quot;)]</span>
</span><span id=__span-16-2><a id=__codelineno-16-2 name=__codelineno-16-2></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=w> </span><span class=nf>LongOperationAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-16-3><a id=__codelineno-16-3 name=__codelineno-16-3></a><span class=p>{</span>
</span><span id=__span-16-4><a id=__codelineno-16-4 name=__codelineno-16-4></a><span class=w>    </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mi>10</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>++</span><span class=p>)</span>
</span><span id=__span-16-5><a id=__codelineno-16-5 name=__codelineno-16-5></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-16-6><a id=__codelineno-16-6 name=__codelineno-16-6></a><span class=w>        </span><span class=n>ct</span><span class=p>.</span><span class=n>ThrowIfCancellationRequested</span><span class=p>();</span><span class=w>  </span><span class=c1>// Check cancellation</span>
</span><span id=__span-16-7><a id=__codelineno-16-7 name=__codelineno-16-7></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Step {i + 1}/10&quot;</span><span class=p>);</span>
</span><span id=__span-16-8><a id=__codelineno-16-8 name=__codelineno-16-8></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>500</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span>
</span><span id=__span-16-9><a id=__codelineno-16-9 name=__codelineno-16-9></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-16-10><a id=__codelineno-16-10 name=__codelineno-16-10></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>CompletedTask</span><span class=p>;</span>
</span><span id=__span-16-11><a id=__codelineno-16-11 name=__codelineno-16-11></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><strong>Supported Signatures:</strong></p> <ul> <li><code>Task</code> (void async)</li> <li><code>Task&lt;T&gt;</code> (async with a result)</li> <li><code>ValueTask</code> (void async, no heap allocation)</li> <li><code>ValueTask&lt;T&gt;</code> (async with a result, no heap allocation)</li> </ul> <hr> <h2 id=result-history>Result History<a class=headerlink href=#result-history title="Permanent link">&para;</a></h2> <h3 id=automatic-history>Automatic History<a class=headerlink href=#automatic-history title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-17-1>1</a></span>
<span class=normal><a href=#__codelineno-17-2>2</a></span>
<span class=normal><a href=#__codelineno-17-3>3</a></span>
<span class=normal><a href=#__codelineno-17-4>4</a></span>
<span class=normal><a href=#__codelineno-17-5>5</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-17-1><a id=__codelineno-17-1 name=__codelineno-17-1></a><span class=na>[WButton(&quot;Generate ID&quot;, historyCapacity: 10)]</span>
</span><span id=__span-17-2><a id=__codelineno-17-2 name=__codelineno-17-2></a><span class=k>private</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=nf>GenerateId</span><span class=p>()</span>
</span><span id=__span-17-3><a id=__codelineno-17-3 name=__codelineno-17-3></a><span class=p>{</span>
</span><span id=__span-17-4><a id=__codelineno-17-4 name=__codelineno-17-4></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=n>System</span><span class=p>.</span><span class=n>Guid</span><span class=p>.</span><span class=n>NewGuid</span><span class=p>().</span><span class=n>ToString</span><span class=p>().</span><span class=n>Substring</span><span class=p>(</span><span class=mi>0</span><span class=p>,</span><span class=w> </span><span class=mi>8</span><span class=p>);</span>
</span><span id=__span-17-5><a id=__codelineno-17-5 name=__codelineno-17-5></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="History panel showing last 10 generated IDs" src=../../../images/inspector/buttons/id-history.png></p> <p><strong>Features:</strong></p> <ul> <li>Per-method, per-target buffering (history survives inspector refresh)</li> <li>Collapsible foldout for each method</li> <li>Chronological order (newest first)</li> <li>Pagination when history exceeds the display threshold</li> </ul> <hr> <h3 id=history-capacity-options>History Capacity Options<a class=headerlink href=#history-capacity-options title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-18-1> 1</a></span>
<span class=normal><a href=#__codelineno-18-2> 2</a></span>
<span class=normal><a href=#__codelineno-18-3> 3</a></span>
<span class=normal><a href=#__codelineno-18-4> 4</a></span>
<span class=normal><a href=#__codelineno-18-5> 5</a></span>
<span class=normal><a href=#__codelineno-18-6> 6</a></span>
<span class=normal><a href=#__codelineno-18-7> 7</a></span>
<span class=normal><a href=#__codelineno-18-8> 8</a></span>
<span class=normal><a href=#__codelineno-18-9> 9</a></span>
<span class=normal><a href=#__codelineno-18-10>10</a></span>
<span class=normal><a href=#__codelineno-18-11>11</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-18-1><a id=__codelineno-18-1 name=__codelineno-18-1></a><span class=c1>// Use global setting (default: 5, configurable in UnityHelpersSettings)</span>
</span><span id=__span-18-2><a id=__codelineno-18-2 name=__codelineno-18-2></a><span class=na>[WButton(&quot;Use Global&quot;)]</span>
</span><span id=__span-18-3><a id=__codelineno-18-3 name=__codelineno-18-3></a><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>UseGlobal</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1</span><span class=p>,</span><span class=w> </span><span class=mi>100</span><span class=p>);</span>
</span><span id=__span-18-4><a id=__codelineno-18-4 name=__codelineno-18-4></a>
</span><span id=__span-18-5><a id=__codelineno-18-5 name=__codelineno-18-5></a><span class=c1>// Custom capacity per method</span>
</span><span id=__span-18-6><a id=__codelineno-18-6 name=__codelineno-18-6></a><span class=na>[WButton(&quot;Keep 20 Results&quot;, historyCapacity: 20)]</span>
</span><span id=__span-18-7><a id=__codelineno-18-7 name=__codelineno-18-7></a><span class=k>private</span><span class=w> </span><span class=kt>float</span><span class=w> </span><span class=nf>KeepMany</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=k>value</span><span class=p>;</span>
</span><span id=__span-18-8><a id=__codelineno-18-8 name=__codelineno-18-8></a>
</span><span id=__span-18-9><a id=__codelineno-18-9 name=__codelineno-18-9></a><span class=c1>// Disable history (0 capacity)</span>
</span><span id=__span-18-10><a id=__codelineno-18-10 name=__codelineno-18-10></a><span class=na>[WButton(&quot;No History&quot;, historyCapacity: 0)]</span>
</span><span id=__span-18-11><a id=__codelineno-18-11 name=__codelineno-18-11></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>NoHistory</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;No history stored&quot;</span><span class=p>);</span>
</span></code></pre></div></td></tr></table></div> <p><strong>Global Setting:</strong> <code>UnityHelpersSettings.WButtonHistorySize</code> (default: 5, range: 1-10)</p> <hr> <p><a id=draw-order--positioning></a> <a id=draw-order-positioning></a></p> <h2 id=draw-order-positioning>Draw Order &amp; Positioning<a class=headerlink href=#draw-order-positioning title="Permanent link">&para;</a></h2> <p>Control the sort order of buttons within their placement section:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-19-1> 1</a></span>
<span class=normal><a href=#__codelineno-19-2> 2</a></span>
<span class=normal><a href=#__codelineno-19-3> 3</a></span>
<span class=normal><a href=#__codelineno-19-4> 4</a></span>
<span class=normal><a href=#__codelineno-19-5> 5</a></span>
<span class=normal><a href=#__codelineno-19-6> 6</a></span>
<span class=normal><a href=#__codelineno-19-7> 7</a></span>
<span class=normal><a href=#__codelineno-19-8> 8</a></span>
<span class=normal><a href=#__codelineno-19-9> 9</a></span>
<span class=normal><a href=#__codelineno-19-10>10</a></span>
<span class=normal><a href=#__codelineno-19-11>11</a></span>
<span class=normal><a href=#__codelineno-19-12>12</a></span>
<span class=normal><a href=#__codelineno-19-13>13</a></span>
<span class=normal><a href=#__codelineno-19-14>14</a></span>
<span class=normal><a href=#__codelineno-19-15>15</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-19-1><a id=__codelineno-19-1 name=__codelineno-19-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>ButtonPositioning</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-19-2><a id=__codelineno-19-2 name=__codelineno-19-2></a><span class=p>{</span>
</span><span id=__span-19-3><a id=__codelineno-19-3 name=__codelineno-19-3></a><span class=w>    </span><span class=c1>// Buttons are sorted by drawOrder (lower values first)</span>
</span><span id=__span-19-4><a id=__codelineno-19-4 name=__codelineno-19-4></a><span class=w>    </span><span class=na>[WButton(&quot;Top Button&quot;, drawOrder: -1)]</span>
</span><span id=__span-19-5><a id=__codelineno-19-5 name=__codelineno-19-5></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TopButton</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Renders first (lowest drawOrder)&quot;</span><span class=p>);</span>
</span><span id=__span-19-6><a id=__codelineno-19-6 name=__codelineno-19-6></a>
</span><span id=__span-19-7><a id=__codelineno-19-7 name=__codelineno-19-7></a><span class=w>    </span><span class=na>[WButton(&quot;Middle Button&quot;, drawOrder: 0)]</span>
</span><span id=__span-19-8><a id=__codelineno-19-8 name=__codelineno-19-8></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>MiddleButton</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Renders second&quot;</span><span class=p>);</span>
</span><span id=__span-19-9><a id=__codelineno-19-9 name=__codelineno-19-9></a>
</span><span id=__span-19-10><a id=__codelineno-19-10 name=__codelineno-19-10></a><span class=w>    </span><span class=na>[WButton(&quot;Bottom Button&quot;, drawOrder: 1)]</span>
</span><span id=__span-19-11><a id=__codelineno-19-11 name=__codelineno-19-11></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>BottomButton</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Renders last (highest drawOrder)&quot;</span><span class=p>);</span>
</span><span id=__span-19-12><a id=__codelineno-19-12 name=__codelineno-19-12></a>
</span><span id=__span-19-13><a id=__codelineno-19-13 name=__codelineno-19-13></a><span class=w>    </span><span class=c1>// Inspector fields - buttons appear above or below based on groupPlacement/global settings</span>
</span><span id=__span-19-14><a id=__codelineno-19-14 name=__codelineno-19-14></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>someField</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>10</span><span class=p>;</span>
</span><span id=__span-19-15><a id=__codelineno-19-15 name=__codelineno-19-15></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Inspector showing button order" src=../../../images/inspector/buttons/button-order.png></p> <p><strong>Positioning Rules:</strong></p> <ul> <li><strong>Lower <code>drawOrder</code> values render first</strong> within a placement section</li> <li><strong>Placement (above/below properties)</strong> is controlled by <code>groupPlacement</code> or the global <code>WButtonPlacement</code> setting, not by <code>drawOrder</code></li> <li><strong>Within the same <code>drawOrder</code></strong>, buttons render in declaration order (source code order)</li> </ul> <hr> <h3 id=pagination-by-draw-order>Pagination by Draw Order<a class=headerlink href=#pagination-by-draw-order title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-20-1> 1</a></span>
<span class=normal><a href=#__codelineno-20-2> 2</a></span>
<span class=normal><a href=#__codelineno-20-3> 3</a></span>
<span class=normal><a href=#__codelineno-20-4> 4</a></span>
<span class=normal><a href=#__codelineno-20-5> 5</a></span>
<span class=normal><a href=#__codelineno-20-6> 6</a></span>
<span class=normal><a href=#__codelineno-20-7> 7</a></span>
<span class=normal><a href=#__codelineno-20-8> 8</a></span>
<span class=normal><a href=#__codelineno-20-9> 9</a></span>
<span class=normal><a href=#__codelineno-20-10>10</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-20-1><a id=__codelineno-20-1 name=__codelineno-20-1></a><span class=na>[WButton(drawOrder: 0)]</span>
</span><span id=__span-20-2><a id=__codelineno-20-2 name=__codelineno-20-2></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Action1</span><span class=p>()</span><span class=w> </span><span class=p>{}</span>
</span><span id=__span-20-3><a id=__codelineno-20-3 name=__codelineno-20-3></a>
</span><span id=__span-20-4><a id=__codelineno-20-4 name=__codelineno-20-4></a><span class=na>[WButton( drawOrder: 0)]</span>
</span><span id=__span-20-5><a id=__codelineno-20-5 name=__codelineno-20-5></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Action2</span><span class=p>()</span><span class=w> </span><span class=p>{}</span>
</span><span id=__span-20-6><a id=__codelineno-20-6 name=__codelineno-20-6></a>
</span><span id=__span-20-7><a id=__codelineno-20-7 name=__codelineno-20-7></a><span class=c1>// ... 10 more buttons with drawOrder: 0 ...</span>
</span><span id=__span-20-8><a id=__codelineno-20-8 name=__codelineno-20-8></a>
</span><span id=__span-20-9><a id=__codelineno-20-9 name=__codelineno-20-9></a><span class=na>[WButton(drawOrder: 0)]</span>
</span><span id=__span-20-10><a id=__codelineno-20-10 name=__codelineno-20-10></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Action12</span><span class=p>()</span><span class=w> </span><span class=p>{}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt='Button pagination controls showing "Page 1 of 2" with navigation buttons' src=../../../images/inspector/buttons/button-pagination.gif></p> <p><strong>Pagination Settings:</strong></p> <ul> <li>Page size controlled by <code>UnityHelpersSettings.WButtonPageSize</code> (default: 6)</li> <li>Pagination only applies within each draw order group</li> <li>Navigation: First, Previous, Next, Last buttons</li> </ul> <hr> <h2 id=grouping>Grouping<a class=headerlink href=#grouping title="Permanent link">&para;</a></h2> <p>Organize buttons into named sections:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-21-1> 1</a></span>
<span class=normal><a href=#__codelineno-21-2> 2</a></span>
<span class=normal><a href=#__codelineno-21-3> 3</a></span>
<span class=normal><a href=#__codelineno-21-4> 4</a></span>
<span class=normal><a href=#__codelineno-21-5> 5</a></span>
<span class=normal><a href=#__codelineno-21-6> 6</a></span>
<span class=normal><a href=#__codelineno-21-7> 7</a></span>
<span class=normal><a href=#__codelineno-21-8> 8</a></span>
<span class=normal><a href=#__codelineno-21-9> 9</a></span>
<span class=normal><a href=#__codelineno-21-10>10</a></span>
<span class=normal><a href=#__codelineno-21-11>11</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-21-1><a id=__codelineno-21-1 name=__codelineno-21-1></a><span class=na>[WButton(&quot;Spawn Enemy&quot;, groupName: &quot;Combat&quot;)]</span>
</span><span id=__span-21-2><a id=__codelineno-21-2 name=__codelineno-21-2></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Enemy spawned&quot;</span><span class=p>);</span>
</span><span id=__span-21-3><a id=__codelineno-21-3 name=__codelineno-21-3></a>
</span><span id=__span-21-4><a id=__codelineno-21-4 name=__codelineno-21-4></a><span class=na>[WButton(&quot;Clear Enemies&quot;, groupName: &quot;Combat&quot;)]</span>
</span><span id=__span-21-5><a id=__codelineno-21-5 name=__codelineno-21-5></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ClearEnemies</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Enemies cleared&quot;</span><span class=p>);</span>
</span><span id=__span-21-6><a id=__codelineno-21-6 name=__codelineno-21-6></a>
</span><span id=__span-21-7><a id=__codelineno-21-7 name=__codelineno-21-7></a><span class=na>[WButton(&quot;Save Game&quot;, groupName: &quot;Persistence&quot;)]</span>
</span><span id=__span-21-8><a id=__codelineno-21-8 name=__codelineno-21-8></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SaveGame</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Game saved&quot;</span><span class=p>);</span>
</span><span id=__span-21-9><a id=__codelineno-21-9 name=__codelineno-21-9></a>
</span><span id=__span-21-10><a id=__codelineno-21-10 name=__codelineno-21-10></a><span class=na>[WButton(&quot;Load Game&quot;, groupName: &quot;Persistence&quot;)]</span>
</span><span id=__span-21-11><a id=__codelineno-21-11 name=__codelineno-21-11></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LoadGame</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Game loaded&quot;</span><span class=p>);</span>
</span></code></pre></div></td></tr></table></div> <p><img alt='Two button groups with headers "Combat" and "Persistence"' src=../../../images/inspector/buttons/button-groupings.png></p> <p><strong>Grouping Behavior:</strong></p> <ul> <li>Groups are created automatically based on <code>groupName</code></li> <li>Buttons within a group are organized by <code>drawOrder</code></li> <li>Groups can be collapsible (controlled by <code>UnityHelpersSettings.WButtonFoldoutBehavior</code>)</li> </ul> <hr> <h3 id=foldout-behavior>Foldout Behavior<a class=headerlink href=#foldout-behavior title="Permanent link">&para;</a></h3> <p><strong>Global Setting:</strong> <code>UnityHelpersSettings.WButtonFoldoutBehavior</code></p> <p><strong>Options:</strong></p> <ul> <li><code>Always</code> - Always show group foldout triangles</li> <li><code>StartExpanded</code> - Collapsible, starts open</li> <li><code>StartCollapsed</code> - Collapsible, starts closed</li> </ul> <p><strong>Animation:</strong></p> <ul> <li>Enable/disable via <code>UnityHelpersSettings.WButtonFoldoutTweenEnabled</code></li> <li>Speed controlled by <code>UnityHelpersSettings.WButtonFoldoutSpeed</code> (default: 2.0, range: 2-12)</li> </ul> <p><img alt="Button group folding/unfolding with smooth animation" src=../../../images/inspector/buttons/button-group-foldout.gif></p> <hr> <h2 id=color-theming>Color Theming<a class=headerlink href=#color-theming title="Permanent link">&para;</a></h2> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-22-1>1</a></span>
<span class=normal><a href=#__codelineno-22-2>2</a></span>
<span class=normal><a href=#__codelineno-22-3>3</a></span>
<span class=normal><a href=#__codelineno-22-4>4</a></span>
<span class=normal><a href=#__codelineno-22-5>5</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-22-1><a id=__codelineno-22-1 name=__codelineno-22-1></a><span class=na>[WButton(&quot;Dangerous Action&quot;, colorKey: &quot;Default-Dark&quot;)]</span>
</span><span id=__span-22-2><a id=__codelineno-22-2 name=__codelineno-22-2></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>DangerousAction</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>LogWarning</span><span class=p>(</span><span class=s>&quot;Dangerous!&quot;</span><span class=p>);</span>
</span><span id=__span-22-3><a id=__codelineno-22-3 name=__codelineno-22-3></a>
</span><span id=__span-22-4><a id=__codelineno-22-4 name=__codelineno-22-4></a><span class=na>[WButton(&quot;Safe Action&quot;, colorKey: &quot;Default-Light&quot;)]</span>
</span><span id=__span-22-5><a id=__codelineno-22-5 name=__codelineno-22-5></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SafeAction</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Safe operation&quot;</span><span class=p>);</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Two buttons with different color themes (default dark/light)" src=../../../images/inspector/buttons/button-colorings.png></p> <p><strong>Built-in Priorities (Color Keys):</strong></p> <ul> <li><code>"Default"</code> - Theme-aware (adapts to Unity theme)</li> <li><code>"Default-Dark"</code> - Dark theme colors</li> <li><code>"Default-Light"</code> - Light theme colors</li> <li><code>"WDefault"</code> - Legacy vibrant blue</li> <li>Custom keys defined in <code>UnityHelpersSettings.WButtonCustomColors</code></li> </ul> <p><strong>Define Custom Colors:</strong></p> <ol> <li>Open <code>ProjectSettings/UnityHelpersSettings.asset</code></li> <li>Add entry to <code>WButtonCustomColors</code> dictionary</li> <li>Set a button background, text color, border</li> </ol> <p><img alt="UnityHelpersSettings showing WButton custom color configuration" src=../../../images/inspector/buttons/helper-settings-color-settings.png></p> <hr> <h2 id=configuration>Configuration<a class=headerlink href=#configuration title="Permanent link">&para;</a></h2> <h3 id=global-settings>Global Settings<a class=headerlink href=#global-settings title="Permanent link">&para;</a></h3> <p>All buttons respect project-wide settings defined in <code>UnityHelpersSettings</code>:</p> <p><strong>Location:</strong> <code>ProjectSettings/UnityHelpersSettings.asset</code></p> <p><strong>Settings:</strong></p> <ul> <li><code>WButtonHistorySize</code> (default: 5, range: 1-10) - Results to keep per method</li> <li><code>WButtonPlacement</code> (Top or Bottom) - Default button position</li> <li><code>WButtonFoldoutBehavior</code> (Always, StartExpanded, StartCollapsed) - Group collapsibility</li> <li><code>WButtonFoldoutTweenEnabled</code> (bool) - Enable group animations</li> <li><code>WButtonFoldoutSpeed</code> (default: 2.0, range: 2-12) - Animation speed</li> <li><code>WButtonPageSize</code> (default: 6) - Buttons per page for pagination</li> <li><code>WButtonCustomColors</code> - Custom color palette dictionary</li> </ul> <p><img alt="UnityHelpersSettings showing all WButton configuration options" src=../../../images/inspector/buttons/helper-button-settings.png></p> <hr> <h2 id=best-practices>Best Practices<a class=headerlink href=#best-practices title="Permanent link">&para;</a></h2> <h3 id=1-clear-button-names>1. Clear Button Names<a class=headerlink href=#1-clear-button-names title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-23-1> 1</a></span>
<span class=normal><a href=#__codelineno-23-2> 2</a></span>
<span class=normal><a href=#__codelineno-23-3> 3</a></span>
<span class=normal><a href=#__codelineno-23-4> 4</a></span>
<span class=normal><a href=#__codelineno-23-5> 5</a></span>
<span class=normal><a href=#__codelineno-23-6> 6</a></span>
<span class=normal><a href=#__codelineno-23-7> 7</a></span>
<span class=normal><a href=#__codelineno-23-8> 8</a></span>
<span class=normal><a href=#__codelineno-23-9> 9</a></span>
<span class=normal><a href=#__codelineno-23-10>10</a></span>
<span class=normal><a href=#__codelineno-23-11>11</a></span>
<span class=normal><a href=#__codelineno-23-12>12</a></span>
<span class=normal><a href=#__codelineno-23-13>13</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-23-1><a id=__codelineno-23-1 name=__codelineno-23-1></a><span class=c1>// ✅ GOOD: Action-oriented, descriptive</span>
</span><span id=__span-23-2><a id=__codelineno-23-2 name=__codelineno-23-2></a><span class=na>[WButton(&quot;Heal to Full&quot;)]</span>
</span><span id=__span-23-3><a id=__codelineno-23-3 name=__codelineno-23-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>HealToFull</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-23-4><a id=__codelineno-23-4 name=__codelineno-23-4></a>
</span><span id=__span-23-5><a id=__codelineno-23-5 name=__codelineno-23-5></a><span class=na>[WButton(&quot;Spawn 10 Enemies&quot;)]</span>
</span><span id=__span-23-6><a id=__codelineno-23-6 name=__codelineno-23-6></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemies</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-23-7><a id=__codelineno-23-7 name=__codelineno-23-7></a>
</span><span id=__span-23-8><a id=__codelineno-23-8 name=__codelineno-23-8></a><span class=c1>// ❌ BAD: Vague or technical</span>
</span><span id=__span-23-9><a id=__codelineno-23-9 name=__codelineno-23-9></a><span class=na>[WButton(&quot;DoStuff&quot;)]</span>
</span><span id=__span-23-10><a id=__codelineno-23-10 name=__codelineno-23-10></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>DoStuff</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-23-11><a id=__codelineno-23-11 name=__codelineno-23-11></a>
</span><span id=__span-23-12><a id=__codelineno-23-12 name=__codelineno-23-12></a><span class=na>[WButton]</span><span class=w>  </span><span class=c1>// Defaults to method name &quot;HandlePlayerDeath&quot;</span>
</span><span id=__span-23-13><a id=__codelineno-23-13 name=__codelineno-23-13></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>HandlePlayerDeath</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=2-group-related-actions>2. Group Related Actions<a class=headerlink href=#2-group-related-actions title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-24-1> 1</a></span>
<span class=normal><a href=#__codelineno-24-2> 2</a></span>
<span class=normal><a href=#__codelineno-24-3> 3</a></span>
<span class=normal><a href=#__codelineno-24-4> 4</a></span>
<span class=normal><a href=#__codelineno-24-5> 5</a></span>
<span class=normal><a href=#__codelineno-24-6> 6</a></span>
<span class=normal><a href=#__codelineno-24-7> 7</a></span>
<span class=normal><a href=#__codelineno-24-8> 8</a></span>
<span class=normal><a href=#__codelineno-24-9> 9</a></span>
<span class=normal><a href=#__codelineno-24-10>10</a></span>
<span class=normal><a href=#__codelineno-24-11>11</a></span>
<span class=normal><a href=#__codelineno-24-12>12</a></span>
<span class=normal><a href=#__codelineno-24-13>13</a></span>
<span class=normal><a href=#__codelineno-24-14>14</a></span>
<span class=normal><a href=#__codelineno-24-15>15</a></span>
<span class=normal><a href=#__codelineno-24-16>16</a></span>
<span class=normal><a href=#__codelineno-24-17>17</a></span>
<span class=normal><a href=#__codelineno-24-18>18</a></span>
<span class=normal><a href=#__codelineno-24-19>19</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-24-1><a id=__codelineno-24-1 name=__codelineno-24-1></a><span class=c1>// ✅ GOOD: Grouped by feature</span>
</span><span id=__span-24-2><a id=__codelineno-24-2 name=__codelineno-24-2></a><span class=na>[WButton(&quot;Spawn Enemy&quot;, groupName: &quot;Combat Testing&quot;)]</span>
</span><span id=__span-24-3><a id=__codelineno-24-3 name=__codelineno-24-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-24-4><a id=__codelineno-24-4 name=__codelineno-24-4></a>
</span><span id=__span-24-5><a id=__codelineno-24-5 name=__codelineno-24-5></a><span class=na>[WButton(&quot;Kill All Enemies&quot;, groupName: &quot;Combat Testing&quot;)]</span>
</span><span id=__span-24-6><a id=__codelineno-24-6 name=__codelineno-24-6></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>KillAll</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-24-7><a id=__codelineno-24-7 name=__codelineno-24-7></a>
</span><span id=__span-24-8><a id=__codelineno-24-8 name=__codelineno-24-8></a><span class=na>[WButton(&quot;Save Progress&quot;, groupName: &quot;Persistence&quot;)]</span>
</span><span id=__span-24-9><a id=__codelineno-24-9 name=__codelineno-24-9></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Save</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-24-10><a id=__codelineno-24-10 name=__codelineno-24-10></a>
</span><span id=__span-24-11><a id=__codelineno-24-11 name=__codelineno-24-11></a><span class=c1>// ❌ BAD: No grouping, cluttered inspector</span>
</span><span id=__span-24-12><a id=__codelineno-24-12 name=__codelineno-24-12></a><span class=na>[WButton(&quot;Spawn Enemy&quot;)]</span>
</span><span id=__span-24-13><a id=__codelineno-24-13 name=__codelineno-24-13></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-24-14><a id=__codelineno-24-14 name=__codelineno-24-14></a>
</span><span id=__span-24-15><a id=__codelineno-24-15 name=__codelineno-24-15></a><span class=na>[WButton(&quot;Save Progress&quot;)]</span>
</span><span id=__span-24-16><a id=__codelineno-24-16 name=__codelineno-24-16></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Save</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-24-17><a id=__codelineno-24-17 name=__codelineno-24-17></a>
</span><span id=__span-24-18><a id=__codelineno-24-18 name=__codelineno-24-18></a><span class=na>[WButton(&quot;Kill All Enemies&quot;)]</span>
</span><span id=__span-24-19><a id=__codelineno-24-19 name=__codelineno-24-19></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>KillAll</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=3-use-history-for-randomvariable-results>3. Use History for Random/Variable Results<a class=headerlink href=#3-use-history-for-randomvariable-results title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-25-1> 1</a></span>
<span class=normal><a href=#__codelineno-25-2> 2</a></span>
<span class=normal><a href=#__codelineno-25-3> 3</a></span>
<span class=normal><a href=#__codelineno-25-4> 4</a></span>
<span class=normal><a href=#__codelineno-25-5> 5</a></span>
<span class=normal><a href=#__codelineno-25-6> 6</a></span>
<span class=normal><a href=#__codelineno-25-7> 7</a></span>
<span class=normal><a href=#__codelineno-25-8> 8</a></span>
<span class=normal><a href=#__codelineno-25-9> 9</a></span>
<span class=normal><a href=#__codelineno-25-10>10</a></span>
<span class=normal><a href=#__codelineno-25-11>11</a></span>
<span class=normal><a href=#__codelineno-25-12>12</a></span>
<span class=normal><a href=#__codelineno-25-13>13</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-25-1><a id=__codelineno-25-1 name=__codelineno-25-1></a><span class=c1>// ✅ GOOD: History helps track random values</span>
</span><span id=__span-25-2><a id=__codelineno-25-2 name=__codelineno-25-2></a><span class=na>[WButton(&quot;Roll Loot&quot;, historyCapacity: 10)]</span>
</span><span id=__span-25-3><a id=__codelineno-25-3 name=__codelineno-25-3></a><span class=k>private</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=nf>RollLoot</span><span class=p>()</span>
</span><span id=__span-25-4><a id=__codelineno-25-4 name=__codelineno-25-4></a><span class=p>{</span>
</span><span id=__span-25-5><a id=__codelineno-25-5 name=__codelineno-25-5></a><span class=w>    </span><span class=k>return</span><span class=w> </span><span class=n>lootTable</span><span class=p>[</span><span class=n>PRNG</span><span class=p>.</span><span class=n>Instance</span><span class=p>.</span><span class=n>Next</span><span class=p>(</span><span class=mi>0</span><span class=p>,</span><span class=w> </span><span class=n>lootTable</span><span class=p>.</span><span class=n>Length</span><span class=p>)];</span>
</span><span id=__span-25-6><a id=__codelineno-25-6 name=__codelineno-25-6></a><span class=p>}</span>
</span><span id=__span-25-7><a id=__codelineno-25-7 name=__codelineno-25-7></a>
</span><span id=__span-25-8><a id=__codelineno-25-8 name=__codelineno-25-8></a><span class=c1>// ✅ GOOD: No history needed for fixed actions</span>
</span><span id=__span-25-9><a id=__codelineno-25-9 name=__codelineno-25-9></a><span class=na>[WButton(&quot;Reset Position&quot;, historyCapacity: 0)]</span>
</span><span id=__span-25-10><a id=__codelineno-25-10 name=__codelineno-25-10></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ResetPosition</span><span class=p>()</span>
</span><span id=__span-25-11><a id=__codelineno-25-11 name=__codelineno-25-11></a><span class=p>{</span>
</span><span id=__span-25-12><a id=__codelineno-25-12 name=__codelineno-25-12></a><span class=w>    </span><span class=n>transform</span><span class=p>.</span><span class=n>position</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Vector3</span><span class=p>.</span><span class=n>zero</span><span class=p>;</span>
</span><span id=__span-25-13><a id=__codelineno-25-13 name=__codelineno-25-13></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=4-async-best-practices>4. Async Best Practices<a class=headerlink href=#4-async-best-practices title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-26-1> 1</a></span>
<span class=normal><a href=#__codelineno-26-2> 2</a></span>
<span class=normal><a href=#__codelineno-26-3> 3</a></span>
<span class=normal><a href=#__codelineno-26-4> 4</a></span>
<span class=normal><a href=#__codelineno-26-5> 5</a></span>
<span class=normal><a href=#__codelineno-26-6> 6</a></span>
<span class=normal><a href=#__codelineno-26-7> 7</a></span>
<span class=normal><a href=#__codelineno-26-8> 8</a></span>
<span class=normal><a href=#__codelineno-26-9> 9</a></span>
<span class=normal><a href=#__codelineno-26-10>10</a></span>
<span class=normal><a href=#__codelineno-26-11>11</a></span>
<span class=normal><a href=#__codelineno-26-12>12</a></span>
<span class=normal><a href=#__codelineno-26-13>13</a></span>
<span class=normal><a href=#__codelineno-26-14>14</a></span>
<span class=normal><a href=#__codelineno-26-15>15</a></span>
<span class=normal><a href=#__codelineno-26-16>16</a></span>
<span class=normal><a href=#__codelineno-26-17>17</a></span>
<span class=normal><a href=#__codelineno-26-18>18</a></span>
<span class=normal><a href=#__codelineno-26-19>19</a></span>
<span class=normal><a href=#__codelineno-26-20>20</a></span>
<span class=normal><a href=#__codelineno-26-21>21</a></span>
<span class=normal><a href=#__codelineno-26-22>22</a></span>
<span class=normal><a href=#__codelineno-26-23>23</a></span>
<span class=normal><a href=#__codelineno-26-24>24</a></span>
<span class=normal><a href=#__codelineno-26-25>25</a></span>
<span class=normal><a href=#__codelineno-26-26>26</a></span>
<span class=normal><a href=#__codelineno-26-27>27</a></span>
<span class=normal><a href=#__codelineno-26-28>28</a></span>
<span class=normal><a href=#__codelineno-26-29>29</a></span>
<span class=normal><a href=#__codelineno-26-30>30</a></span>
<span class=normal><a href=#__codelineno-26-31>31</a></span>
<span class=normal><a href=#__codelineno-26-32>32</a></span>
<span class=normal><a href=#__codelineno-26-33>33</a></span>
<span class=normal><a href=#__codelineno-26-34>34</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-26-1><a id=__codelineno-26-1 name=__codelineno-26-1></a><span class=c1>// ✅ GOOD: Accept CancellationToken, check it</span>
</span><span id=__span-26-2><a id=__codelineno-26-2 name=__codelineno-26-2></a><span class=na>[WButton(&quot;Long Task&quot;)]</span>
</span><span id=__span-26-3><a id=__codelineno-26-3 name=__codelineno-26-3></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=w> </span><span class=nf>LongTaskAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-26-4><a id=__codelineno-26-4 name=__codelineno-26-4></a><span class=p>{</span>
</span><span id=__span-26-5><a id=__codelineno-26-5 name=__codelineno-26-5></a><span class=w>    </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mi>100</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>++</span><span class=p>)</span>
</span><span id=__span-26-6><a id=__codelineno-26-6 name=__codelineno-26-6></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-26-7><a id=__codelineno-26-7 name=__codelineno-26-7></a><span class=w>        </span><span class=n>ct</span><span class=p>.</span><span class=n>ThrowIfCancellationRequested</span><span class=p>();</span>
</span><span id=__span-26-8><a id=__codelineno-26-8 name=__codelineno-26-8></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>100</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span>
</span><span id=__span-26-9><a id=__codelineno-26-9 name=__codelineno-26-9></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-26-10><a id=__codelineno-26-10 name=__codelineno-26-10></a><span class=p>}</span>
</span><span id=__span-26-11><a id=__codelineno-26-11 name=__codelineno-26-11></a>
</span><span id=__span-26-12><a id=__codelineno-26-12 name=__codelineno-26-12></a><span class=c1>// ✅ GOOD: Handle exceptions gracefully</span>
</span><span id=__span-26-13><a id=__codelineno-26-13 name=__codelineno-26-13></a><span class=na>[WButton(&quot;Risky Operation&quot;)]</span>
</span><span id=__span-26-14><a id=__codelineno-26-14 name=__codelineno-26-14></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=w> </span><span class=nf>RiskyOperationAsync</span><span class=p>()</span>
</span><span id=__span-26-15><a id=__codelineno-26-15 name=__codelineno-26-15></a><span class=p>{</span>
</span><span id=__span-26-16><a id=__codelineno-26-16 name=__codelineno-26-16></a><span class=w>    </span><span class=k>try</span>
</span><span id=__span-26-17><a id=__codelineno-26-17 name=__codelineno-26-17></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-26-18><a id=__codelineno-26-18 name=__codelineno-26-18></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=nf>SomeRiskyApiCall</span><span class=p>();</span>
</span><span id=__span-26-19><a id=__codelineno-26-19 name=__codelineno-26-19></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-26-20><a id=__codelineno-26-20 name=__codelineno-26-20></a><span class=w>    </span><span class=k>catch</span><span class=w> </span><span class=p>(</span><span class=n>Exception</span><span class=w> </span><span class=n>ex</span><span class=p>)</span>
</span><span id=__span-26-21><a id=__codelineno-26-21 name=__codelineno-26-21></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-26-22><a id=__codelineno-26-22 name=__codelineno-26-22></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>LogError</span><span class=p>(</span><span class=s>$&quot;Operation failed: {ex.Message}&quot;</span><span class=p>);</span>
</span><span id=__span-26-23><a id=__codelineno-26-23 name=__codelineno-26-23></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-26-24><a id=__codelineno-26-24 name=__codelineno-26-24></a><span class=p>}</span>
</span><span id=__span-26-25><a id=__codelineno-26-25 name=__codelineno-26-25></a>
</span><span id=__span-26-26><a id=__codelineno-26-26 name=__codelineno-26-26></a><span class=c1>// ❌ BAD: Long operation with no cancellation support</span>
</span><span id=__span-26-27><a id=__codelineno-26-27 name=__codelineno-26-27></a><span class=na>[WButton(&quot;Infinite Loop&quot;)]</span>
</span><span id=__span-26-28><a id=__codelineno-26-28 name=__codelineno-26-28></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=w> </span><span class=nf>InfiniteLoopAsync</span><span class=p>()</span>
</span><span id=__span-26-29><a id=__codelineno-26-29 name=__codelineno-26-29></a><span class=p>{</span>
</span><span id=__span-26-30><a id=__codelineno-26-30 name=__codelineno-26-30></a><span class=w>    </span><span class=k>while</span><span class=w> </span><span class=p>(</span><span class=k>true</span><span class=p>)</span><span class=w>  </span><span class=c1>// No way to stop this!</span>
</span><span id=__span-26-31><a id=__codelineno-26-31 name=__codelineno-26-31></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-26-32><a id=__codelineno-26-32 name=__codelineno-26-32></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>1000</span><span class=p>);</span>
</span><span id=__span-26-33><a id=__codelineno-26-33 name=__codelineno-26-33></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-26-34><a id=__codelineno-26-34 name=__codelineno-26-34></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=5-color-usage>5. Color Usage<a class=headerlink href=#5-color-usage title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-27-1> 1</a></span>
<span class=normal><a href=#__codelineno-27-2> 2</a></span>
<span class=normal><a href=#__codelineno-27-3> 3</a></span>
<span class=normal><a href=#__codelineno-27-4> 4</a></span>
<span class=normal><a href=#__codelineno-27-5> 5</a></span>
<span class=normal><a href=#__codelineno-27-6> 6</a></span>
<span class=normal><a href=#__codelineno-27-7> 7</a></span>
<span class=normal><a href=#__codelineno-27-8> 8</a></span>
<span class=normal><a href=#__codelineno-27-9> 9</a></span>
<span class=normal><a href=#__codelineno-27-10>10</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-27-1><a id=__codelineno-27-1 name=__codelineno-27-1></a><span class=c1>// ✅ GOOD: Use colors to indicate risk/importance</span>
</span><span id=__span-27-2><a id=__codelineno-27-2 name=__codelineno-27-2></a><span class=na>[WButton(&quot;Delete All Data&quot;, colorKey: &quot;Default-Dark&quot;)]</span><span class=w>  </span><span class=c1>// Dark = danger</span>
</span><span id=__span-27-3><a id=__codelineno-27-3 name=__codelineno-27-3></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>DeleteAllData</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-27-4><a id=__codelineno-27-4 name=__codelineno-27-4></a>
</span><span id=__span-27-5><a id=__codelineno-27-5 name=__codelineno-27-5></a><span class=na>[WButton(&quot;Quick Save&quot;, colorKey: &quot;Default-Light&quot;)]</span><span class=w>  </span><span class=c1>// Light = safe</span>
</span><span id=__span-27-6><a id=__codelineno-27-6 name=__codelineno-27-6></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>QuickSave</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span><span id=__span-27-7><a id=__codelineno-27-7 name=__codelineno-27-7></a>
</span><span id=__span-27-8><a id=__codelineno-27-8 name=__codelineno-27-8></a><span class=c1>// ❌ BAD: Random colors without meaning</span>
</span><span id=__span-27-9><a id=__codelineno-27-9 name=__codelineno-27-9></a><span class=na>[WButton(&quot;Log Message&quot;, colorKey: &quot;CustomPurple&quot;)]</span><span class=w>  </span><span class=c1>// Why purple?</span>
</span><span id=__span-27-10><a id=__codelineno-27-10 name=__codelineno-27-10></a><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LogMessage</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>...</span><span class=w> </span><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h2 id=examples>Examples<a class=headerlink href=#examples title="Permanent link">&para;</a></h2> <h3 id=example-1-gameplay-testing>Example 1: Gameplay Testing<a class=headerlink href=#example-1-gameplay-testing title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-28-1> 1</a></span>
<span class=normal><a href=#__codelineno-28-2> 2</a></span>
<span class=normal><a href=#__codelineno-28-3> 3</a></span>
<span class=normal><a href=#__codelineno-28-4> 4</a></span>
<span class=normal><a href=#__codelineno-28-5> 5</a></span>
<span class=normal><a href=#__codelineno-28-6> 6</a></span>
<span class=normal><a href=#__codelineno-28-7> 7</a></span>
<span class=normal><a href=#__codelineno-28-8> 8</a></span>
<span class=normal><a href=#__codelineno-28-9> 9</a></span>
<span class=normal><a href=#__codelineno-28-10>10</a></span>
<span class=normal><a href=#__codelineno-28-11>11</a></span>
<span class=normal><a href=#__codelineno-28-12>12</a></span>
<span class=normal><a href=#__codelineno-28-13>13</a></span>
<span class=normal><a href=#__codelineno-28-14>14</a></span>
<span class=normal><a href=#__codelineno-28-15>15</a></span>
<span class=normal><a href=#__codelineno-28-16>16</a></span>
<span class=normal><a href=#__codelineno-28-17>17</a></span>
<span class=normal><a href=#__codelineno-28-18>18</a></span>
<span class=normal><a href=#__codelineno-28-19>19</a></span>
<span class=normal><a href=#__codelineno-28-20>20</a></span>
<span class=normal><a href=#__codelineno-28-21>21</a></span>
<span class=normal><a href=#__codelineno-28-22>22</a></span>
<span class=normal><a href=#__codelineno-28-23>23</a></span>
<span class=normal><a href=#__codelineno-28-24>24</a></span>
<span class=normal><a href=#__codelineno-28-25>25</a></span>
<span class=normal><a href=#__codelineno-28-26>26</a></span>
<span class=normal><a href=#__codelineno-28-27>27</a></span>
<span class=normal><a href=#__codelineno-28-28>28</a></span>
<span class=normal><a href=#__codelineno-28-29>29</a></span>
<span class=normal><a href=#__codelineno-28-30>30</a></span>
<span class=normal><a href=#__codelineno-28-31>31</a></span>
<span class=normal><a href=#__codelineno-28-32>32</a></span>
<span class=normal><a href=#__codelineno-28-33>33</a></span>
<span class=normal><a href=#__codelineno-28-34>34</a></span>
<span class=normal><a href=#__codelineno-28-35>35</a></span>
<span class=normal><a href=#__codelineno-28-36>36</a></span>
<span class=normal><a href=#__codelineno-28-37>37</a></span>
<span class=normal><a href=#__codelineno-28-38>38</a></span>
<span class=normal><a href=#__codelineno-28-39>39</a></span>
<span class=normal><a href=#__codelineno-28-40>40</a></span>
<span class=normal><a href=#__codelineno-28-41>41</a></span>
<span class=normal><a href=#__codelineno-28-42>42</a></span>
<span class=normal><a href=#__codelineno-28-43>43</a></span>
<span class=normal><a href=#__codelineno-28-44>44</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-28-1><a id=__codelineno-28-1 name=__codelineno-28-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-28-2><a id=__codelineno-28-2 name=__codelineno-28-2></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-28-3><a id=__codelineno-28-3 name=__codelineno-28-3></a>
</span><span id=__span-28-4><a id=__codelineno-28-4 name=__codelineno-28-4></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>PlayerDebug</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-28-5><a id=__codelineno-28-5 name=__codelineno-28-5></a><span class=p>{</span>
</span><span id=__span-28-6><a id=__codelineno-28-6 name=__codelineno-28-6></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-28-7><a id=__codelineno-28-7 name=__codelineno-28-7></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>gold</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
</span><span id=__span-28-8><a id=__codelineno-28-8 name=__codelineno-28-8></a>
</span><span id=__span-28-9><a id=__codelineno-28-9 name=__codelineno-28-9></a><span class=w>    </span><span class=na>[WButton(&quot;Heal&quot;, groupName: &quot;Health&quot;, colorKey: &quot;Default-Light&quot;)]</span>
</span><span id=__span-28-10><a id=__codelineno-28-10 name=__codelineno-28-10></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Heal</span><span class=p>()</span>
</span><span id=__span-28-11><a id=__codelineno-28-11 name=__codelineno-28-11></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-28-12><a id=__codelineno-28-12 name=__codelineno-28-12></a><span class=w>        </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-28-13><a id=__codelineno-28-13 name=__codelineno-28-13></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Player healed!&quot;</span><span class=p>);</span>
</span><span id=__span-28-14><a id=__codelineno-28-14 name=__codelineno-28-14></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-28-15><a id=__codelineno-28-15 name=__codelineno-28-15></a>
</span><span id=__span-28-16><a id=__codelineno-28-16 name=__codelineno-28-16></a><span class=w>    </span><span class=na>[WButton(&quot;Take Damage&quot;, groupName: &quot;Health&quot;)]</span>
</span><span id=__span-28-17><a id=__codelineno-28-17 name=__codelineno-28-17></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>()</span>
</span><span id=__span-28-18><a id=__codelineno-28-18 name=__codelineno-28-18></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-28-19><a id=__codelineno-28-19 name=__codelineno-28-19></a><span class=w>        </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=mi>25</span><span class=p>;</span>
</span><span id=__span-28-20><a id=__codelineno-28-20 name=__codelineno-28-20></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Took damage! Health: {health}&quot;</span><span class=p>);</span>
</span><span id=__span-28-21><a id=__codelineno-28-21 name=__codelineno-28-21></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-28-22><a id=__codelineno-28-22 name=__codelineno-28-22></a>
</span><span id=__span-28-23><a id=__codelineno-28-23 name=__codelineno-28-23></a><span class=w>    </span><span class=na>[WButton(&quot;Kill Player&quot;, groupName: &quot;Health&quot;, colorKey: &quot;Default-Dark&quot;)]</span>
</span><span id=__span-28-24><a id=__codelineno-28-24 name=__codelineno-28-24></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Kill</span><span class=p>()</span>
</span><span id=__span-28-25><a id=__codelineno-28-25 name=__codelineno-28-25></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-28-26><a id=__codelineno-28-26 name=__codelineno-28-26></a><span class=w>        </span><span class=n>health</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
</span><span id=__span-28-27><a id=__codelineno-28-27 name=__codelineno-28-27></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>LogWarning</span><span class=p>(</span><span class=s>&quot;Player died!&quot;</span><span class=p>);</span>
</span><span id=__span-28-28><a id=__codelineno-28-28 name=__codelineno-28-28></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-28-29><a id=__codelineno-28-29 name=__codelineno-28-29></a>
</span><span id=__span-28-30><a id=__codelineno-28-30 name=__codelineno-28-30></a><span class=w>    </span><span class=na>[WButton(&quot;Add Gold&quot;, groupName: &quot;Economy&quot;)]</span>
</span><span id=__span-28-31><a id=__codelineno-28-31 name=__codelineno-28-31></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>AddGold</span><span class=p>()</span>
</span><span id=__span-28-32><a id=__codelineno-28-32 name=__codelineno-28-32></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-28-33><a id=__codelineno-28-33 name=__codelineno-28-33></a><span class=w>        </span><span class=n>gold</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span>
</span><span id=__span-28-34><a id=__codelineno-28-34 name=__codelineno-28-34></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Gold: {gold}&quot;</span><span class=p>);</span>
</span><span id=__span-28-35><a id=__codelineno-28-35 name=__codelineno-28-35></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-28-36><a id=__codelineno-28-36 name=__codelineno-28-36></a>
</span><span id=__span-28-37><a id=__codelineno-28-37 name=__codelineno-28-37></a><span class=w>    </span><span class=na>[WButton(&quot;Roll Reward&quot;, groupName: &quot;Economy&quot;, historyCapacity: 10)]</span>
</span><span id=__span-28-38><a id=__codelineno-28-38 name=__codelineno-28-38></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>RollReward</span><span class=p>()</span>
</span><span id=__span-28-39><a id=__codelineno-28-39 name=__codelineno-28-39></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-28-40><a id=__codelineno-28-40 name=__codelineno-28-40></a><span class=w>        </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>PRNG</span><span class=p>.</span><span class=n>Instance</span><span class=p>.</span><span class=n>Next</span><span class=p>(</span><span class=mi>10</span><span class=p>,</span><span class=w> </span><span class=mi>100</span><span class=p>);</span>
</span><span id=__span-28-41><a id=__codelineno-28-41 name=__codelineno-28-41></a><span class=w>        </span><span class=n>gold</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
</span><span id=__span-28-42><a id=__codelineno-28-42 name=__codelineno-28-42></a><span class=w>        </span><span class=k>return</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
</span><span id=__span-28-43><a id=__codelineno-28-43 name=__codelineno-28-43></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-28-44><a id=__codelineno-28-44 name=__codelineno-28-44></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="PlayerDebug inspector with Health and Economy button groups" src=../../../images/inspector/buttons/player-debug.png></p> <hr> <h3 id=example-2-async-data-loading>Example 2: Async Data Loading<a class=headerlink href=#example-2-async-data-loading title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-29-1> 1</a></span>
<span class=normal><a href=#__codelineno-29-2> 2</a></span>
<span class=normal><a href=#__codelineno-29-3> 3</a></span>
<span class=normal><a href=#__codelineno-29-4> 4</a></span>
<span class=normal><a href=#__codelineno-29-5> 5</a></span>
<span class=normal><a href=#__codelineno-29-6> 6</a></span>
<span class=normal><a href=#__codelineno-29-7> 7</a></span>
<span class=normal><a href=#__codelineno-29-8> 8</a></span>
<span class=normal><a href=#__codelineno-29-9> 9</a></span>
<span class=normal><a href=#__codelineno-29-10>10</a></span>
<span class=normal><a href=#__codelineno-29-11>11</a></span>
<span class=normal><a href=#__codelineno-29-12>12</a></span>
<span class=normal><a href=#__codelineno-29-13>13</a></span>
<span class=normal><a href=#__codelineno-29-14>14</a></span>
<span class=normal><a href=#__codelineno-29-15>15</a></span>
<span class=normal><a href=#__codelineno-29-16>16</a></span>
<span class=normal><a href=#__codelineno-29-17>17</a></span>
<span class=normal><a href=#__codelineno-29-18>18</a></span>
<span class=normal><a href=#__codelineno-29-19>19</a></span>
<span class=normal><a href=#__codelineno-29-20>20</a></span>
<span class=normal><a href=#__codelineno-29-21>21</a></span>
<span class=normal><a href=#__codelineno-29-22>22</a></span>
<span class=normal><a href=#__codelineno-29-23>23</a></span>
<span class=normal><a href=#__codelineno-29-24>24</a></span>
<span class=normal><a href=#__codelineno-29-25>25</a></span>
<span class=normal><a href=#__codelineno-29-26>26</a></span>
<span class=normal><a href=#__codelineno-29-27>27</a></span>
<span class=normal><a href=#__codelineno-29-28>28</a></span>
<span class=normal><a href=#__codelineno-29-29>29</a></span>
<span class=normal><a href=#__codelineno-29-30>30</a></span>
<span class=normal><a href=#__codelineno-29-31>31</a></span>
<span class=normal><a href=#__codelineno-29-32>32</a></span>
<span class=normal><a href=#__codelineno-29-33>33</a></span>
<span class=normal><a href=#__codelineno-29-34>34</a></span>
<span class=normal><a href=#__codelineno-29-35>35</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-29-1><a id=__codelineno-29-1 name=__codelineno-29-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-29-2><a id=__codelineno-29-2 name=__codelineno-29-2></a><span class=k>using</span><span class=w> </span><span class=nn>System.Threading</span><span class=p>;</span>
</span><span id=__span-29-3><a id=__codelineno-29-3 name=__codelineno-29-3></a><span class=k>using</span><span class=w> </span><span class=nn>System.Threading.Tasks</span><span class=p>;</span>
</span><span id=__span-29-4><a id=__codelineno-29-4 name=__codelineno-29-4></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-29-5><a id=__codelineno-29-5 name=__codelineno-29-5></a>
</span><span id=__span-29-6><a id=__codelineno-29-6 name=__codelineno-29-6></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>DataManager</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-29-7><a id=__codelineno-29-7 name=__codelineno-29-7></a><span class=p>{</span>
</span><span id=__span-29-8><a id=__codelineno-29-8 name=__codelineno-29-8></a><span class=w>    </span><span class=na>[WButton(&quot;Load Player Data&quot;)]</span>
</span><span id=__span-29-9><a id=__codelineno-29-9 name=__codelineno-29-9></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=o>&lt;</span><span class=kt>string</span><span class=o>&gt;</span><span class=w> </span><span class=n>LoadPlayerDataAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-29-10><a id=__codelineno-29-10 name=__codelineno-29-10></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-29-11><a id=__codelineno-29-11 name=__codelineno-29-11></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Loading player data...&quot;</span><span class=p>);</span>
</span><span id=__span-29-12><a id=__codelineno-29-12 name=__codelineno-29-12></a>
</span><span id=__span-29-13><a id=__codelineno-29-13 name=__codelineno-29-13></a><span class=w>        </span><span class=c1>// Simulate network request</span>
</span><span id=__span-29-14><a id=__codelineno-29-14 name=__codelineno-29-14></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>2000</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span>
</span><span id=__span-29-15><a id=__codelineno-29-15 name=__codelineno-29-15></a>
</span><span id=__span-29-16><a id=__codelineno-29-16 name=__codelineno-29-16></a><span class=w>        </span><span class=kt>string</span><span class=w> </span><span class=n>playerName</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=s>&quot;TestPlayer_&quot;</span><span class=w> </span><span class=o>+</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1000</span><span class=p>,</span><span class=w> </span><span class=mi>9999</span><span class=p>);</span>
</span><span id=__span-29-17><a id=__codelineno-29-17 name=__codelineno-29-17></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Loaded: {playerName}&quot;</span><span class=p>);</span>
</span><span id=__span-29-18><a id=__codelineno-29-18 name=__codelineno-29-18></a>
</span><span id=__span-29-19><a id=__codelineno-29-19 name=__codelineno-29-19></a><span class=w>        </span><span class=k>return</span><span class=w> </span><span class=n>playerName</span><span class=p>;</span>
</span><span id=__span-29-20><a id=__codelineno-29-20 name=__codelineno-29-20></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-29-21><a id=__codelineno-29-21 name=__codelineno-29-21></a>
</span><span id=__span-29-22><a id=__codelineno-29-22 name=__codelineno-29-22></a><span class=w>    </span><span class=na>[WButton(&quot;Batch Load&quot;, historyCapacity: 5)]</span>
</span><span id=__span-29-23><a id=__codelineno-29-23 name=__codelineno-29-23></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=o>&lt;</span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>BatchLoadAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-29-24><a id=__codelineno-29-24 name=__codelineno-29-24></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-29-25><a id=__codelineno-29-25 name=__codelineno-29-25></a><span class=w>        </span><span class=kt>int</span><span class=w> </span><span class=n>count</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
</span><span id=__span-29-26><a id=__codelineno-29-26 name=__codelineno-29-26></a><span class=w>        </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mi>10</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>++</span><span class=p>)</span>
</span><span id=__span-29-27><a id=__codelineno-29-27 name=__codelineno-29-27></a><span class=w>        </span><span class=p>{</span>
</span><span id=__span-29-28><a id=__codelineno-29-28 name=__codelineno-29-28></a><span class=w>            </span><span class=n>ct</span><span class=p>.</span><span class=n>ThrowIfCancellationRequested</span><span class=p>();</span>
</span><span id=__span-29-29><a id=__codelineno-29-29 name=__codelineno-29-29></a><span class=w>            </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>200</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span>
</span><span id=__span-29-30><a id=__codelineno-29-30 name=__codelineno-29-30></a><span class=w>            </span><span class=n>count</span><span class=o>++</span><span class=p>;</span>
</span><span id=__span-29-31><a id=__codelineno-29-31 name=__codelineno-29-31></a><span class=w>            </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Loaded item {count}/10&quot;</span><span class=p>);</span>
</span><span id=__span-29-32><a id=__codelineno-29-32 name=__codelineno-29-32></a><span class=w>        </span><span class=p>}</span>
</span><span id=__span-29-33><a id=__codelineno-29-33 name=__codelineno-29-33></a><span class=w>        </span><span class=k>return</span><span class=w> </span><span class=n>count</span><span class=p>;</span>
</span><span id=__span-29-34><a id=__codelineno-29-34 name=__codelineno-29-34></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-29-35><a id=__codelineno-29-35 name=__codelineno-29-35></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Async button showing loading spinner, then result" src=../../../images/inspector/buttons/data-manager-loading.gif></p> <hr> <h3 id=example-3-procedural-generation-testing>Example 3: Procedural Generation Testing<a class=headerlink href=#example-3-procedural-generation-testing title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-30-1> 1</a></span>
<span class=normal><a href=#__codelineno-30-2> 2</a></span>
<span class=normal><a href=#__codelineno-30-3> 3</a></span>
<span class=normal><a href=#__codelineno-30-4> 4</a></span>
<span class=normal><a href=#__codelineno-30-5> 5</a></span>
<span class=normal><a href=#__codelineno-30-6> 6</a></span>
<span class=normal><a href=#__codelineno-30-7> 7</a></span>
<span class=normal><a href=#__codelineno-30-8> 8</a></span>
<span class=normal><a href=#__codelineno-30-9> 9</a></span>
<span class=normal><a href=#__codelineno-30-10>10</a></span>
<span class=normal><a href=#__codelineno-30-11>11</a></span>
<span class=normal><a href=#__codelineno-30-12>12</a></span>
<span class=normal><a href=#__codelineno-30-13>13</a></span>
<span class=normal><a href=#__codelineno-30-14>14</a></span>
<span class=normal><a href=#__codelineno-30-15>15</a></span>
<span class=normal><a href=#__codelineno-30-16>16</a></span>
<span class=normal><a href=#__codelineno-30-17>17</a></span>
<span class=normal><a href=#__codelineno-30-18>18</a></span>
<span class=normal><a href=#__codelineno-30-19>19</a></span>
<span class=normal><a href=#__codelineno-30-20>20</a></span>
<span class=normal><a href=#__codelineno-30-21>21</a></span>
<span class=normal><a href=#__codelineno-30-22>22</a></span>
<span class=normal><a href=#__codelineno-30-23>23</a></span>
<span class=normal><a href=#__codelineno-30-24>24</a></span>
<span class=normal><a href=#__codelineno-30-25>25</a></span>
<span class=normal><a href=#__codelineno-30-26>26</a></span>
<span class=normal><a href=#__codelineno-30-27>27</a></span>
<span class=normal><a href=#__codelineno-30-28>28</a></span>
<span class=normal><a href=#__codelineno-30-29>29</a></span>
<span class=normal><a href=#__codelineno-30-30>30</a></span>
<span class=normal><a href=#__codelineno-30-31>31</a></span>
<span class=normal><a href=#__codelineno-30-32>32</a></span>
<span class=normal><a href=#__codelineno-30-33>33</a></span>
<span class=normal><a href=#__codelineno-30-34>34</a></span>
<span class=normal><a href=#__codelineno-30-35>35</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-30-1><a id=__codelineno-30-1 name=__codelineno-30-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-30-2><a id=__codelineno-30-2 name=__codelineno-30-2></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-30-3><a id=__codelineno-30-3 name=__codelineno-30-3></a>
</span><span id=__span-30-4><a id=__codelineno-30-4 name=__codelineno-30-4></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>LevelGenerator</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-30-5><a id=__codelineno-30-5 name=__codelineno-30-5></a><span class=p>{</span>
</span><span id=__span-30-6><a id=__codelineno-30-6 name=__codelineno-30-6></a><span class=w>    </span><span class=na>[WButton(&quot;Generate Seed&quot;, historyCapacity: 20)]</span>
</span><span id=__span-30-7><a id=__codelineno-30-7 name=__codelineno-30-7></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=nf>GenerateSeed</span><span class=p>()</span>
</span><span id=__span-30-8><a id=__codelineno-30-8 name=__codelineno-30-8></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-30-9><a id=__codelineno-30-9 name=__codelineno-30-9></a><span class=w>        </span><span class=k>return</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1000</span><span class=p>,</span><span class=w> </span><span class=mi>9999</span><span class=p>);</span>
</span><span id=__span-30-10><a id=__codelineno-30-10 name=__codelineno-30-10></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-30-11><a id=__codelineno-30-11 name=__codelineno-30-11></a>
</span><span id=__span-30-12><a id=__codelineno-30-12 name=__codelineno-30-12></a><span class=w>    </span><span class=na>[WButton(&quot;Generate Level&quot;)]</span>
</span><span id=__span-30-13><a id=__codelineno-30-13 name=__codelineno-30-13></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>GenerateLevel</span><span class=p>()</span>
</span><span id=__span-30-14><a id=__codelineno-30-14 name=__codelineno-30-14></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-30-15><a id=__codelineno-30-15 name=__codelineno-30-15></a><span class=w>        </span><span class=kt>int</span><span class=w> </span><span class=n>seed</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=n>Range</span><span class=p>(</span><span class=mi>1000</span><span class=p>,</span><span class=w> </span><span class=mi>9999</span><span class=p>);</span>
</span><span id=__span-30-16><a id=__codelineno-30-16 name=__codelineno-30-16></a><span class=w>        </span><span class=n>Random</span><span class=p>.</span><span class=n>InitState</span><span class=p>(</span><span class=n>seed</span><span class=p>);</span>
</span><span id=__span-30-17><a id=__codelineno-30-17 name=__codelineno-30-17></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Generating level with seed: {seed}&quot;</span><span class=p>);</span>
</span><span id=__span-30-18><a id=__codelineno-30-18 name=__codelineno-30-18></a><span class=w>        </span><span class=c1>// ... generation logic ...</span>
</span><span id=__span-30-19><a id=__codelineno-30-19 name=__codelineno-30-19></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-30-20><a id=__codelineno-30-20 name=__codelineno-30-20></a>
</span><span id=__span-30-21><a id=__codelineno-30-21 name=__codelineno-30-21></a><span class=w>    </span><span class=na>[WButton(&quot;Clear Level&quot;, colorKey: &quot;Default-Dark&quot;)]</span>
</span><span id=__span-30-22><a id=__codelineno-30-22 name=__codelineno-30-22></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ClearLevel</span><span class=p>()</span>
</span><span id=__span-30-23><a id=__codelineno-30-23 name=__codelineno-30-23></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-30-24><a id=__codelineno-30-24 name=__codelineno-30-24></a><span class=w>        </span><span class=c1>// ... cleanup logic ...</span>
</span><span id=__span-30-25><a id=__codelineno-30-25 name=__codelineno-30-25></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Level cleared&quot;</span><span class=p>);</span>
</span><span id=__span-30-26><a id=__codelineno-30-26 name=__codelineno-30-26></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-30-27><a id=__codelineno-30-27 name=__codelineno-30-27></a>
</span><span id=__span-30-28><a id=__codelineno-30-28 name=__codelineno-30-28></a><span class=w>    </span><span class=na>[WButton(&quot;Generate with Seed&quot;)]</span>
</span><span id=__span-30-29><a id=__codelineno-30-29 name=__codelineno-30-29></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>GenerateWithSeed</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>seed</span><span class=p>)</span>
</span><span id=__span-30-30><a id=__codelineno-30-30 name=__codelineno-30-30></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-30-31><a id=__codelineno-30-31 name=__codelineno-30-31></a><span class=w>        </span><span class=n>Random</span><span class=p>.</span><span class=n>InitState</span><span class=p>(</span><span class=n>seed</span><span class=p>);</span>
</span><span id=__span-30-32><a id=__codelineno-30-32 name=__codelineno-30-32></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Generating with seed: {seed}&quot;</span><span class=p>);</span>
</span><span id=__span-30-33><a id=__codelineno-30-33 name=__codelineno-30-33></a><span class=w>        </span><span class=c1>// ... generation logic ...</span>
</span><span id=__span-30-34><a id=__codelineno-30-34 name=__codelineno-30-34></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-30-35><a id=__codelineno-30-35 name=__codelineno-30-35></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Level Generator script showing that WButton supports parameters" src=../../../images/inspector/buttons/level-generator-with-parameters.png></p> <hr> <h3 id=example-4-coroutine-animation-testing>Example 4: Coroutine Animation Testing<a class=headerlink href=#example-4-coroutine-animation-testing title="Permanent link">&para;</a></h3> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-31-1> 1</a></span>
<span class=normal><a href=#__codelineno-31-2> 2</a></span>
<span class=normal><a href=#__codelineno-31-3> 3</a></span>
<span class=normal><a href=#__codelineno-31-4> 4</a></span>
<span class=normal><a href=#__codelineno-31-5> 5</a></span>
<span class=normal><a href=#__codelineno-31-6> 6</a></span>
<span class=normal><a href=#__codelineno-31-7> 7</a></span>
<span class=normal><a href=#__codelineno-31-8> 8</a></span>
<span class=normal><a href=#__codelineno-31-9> 9</a></span>
<span class=normal><a href=#__codelineno-31-10>10</a></span>
<span class=normal><a href=#__codelineno-31-11>11</a></span>
<span class=normal><a href=#__codelineno-31-12>12</a></span>
<span class=normal><a href=#__codelineno-31-13>13</a></span>
<span class=normal><a href=#__codelineno-31-14>14</a></span>
<span class=normal><a href=#__codelineno-31-15>15</a></span>
<span class=normal><a href=#__codelineno-31-16>16</a></span>
<span class=normal><a href=#__codelineno-31-17>17</a></span>
<span class=normal><a href=#__codelineno-31-18>18</a></span>
<span class=normal><a href=#__codelineno-31-19>19</a></span>
<span class=normal><a href=#__codelineno-31-20>20</a></span>
<span class=normal><a href=#__codelineno-31-21>21</a></span>
<span class=normal><a href=#__codelineno-31-22>22</a></span>
<span class=normal><a href=#__codelineno-31-23>23</a></span>
<span class=normal><a href=#__codelineno-31-24>24</a></span>
<span class=normal><a href=#__codelineno-31-25>25</a></span>
<span class=normal><a href=#__codelineno-31-26>26</a></span>
<span class=normal><a href=#__codelineno-31-27>27</a></span>
<span class=normal><a href=#__codelineno-31-28>28</a></span>
<span class=normal><a href=#__codelineno-31-29>29</a></span>
<span class=normal><a href=#__codelineno-31-30>30</a></span>
<span class=normal><a href=#__codelineno-31-31>31</a></span>
<span class=normal><a href=#__codelineno-31-32>32</a></span>
<span class=normal><a href=#__codelineno-31-33>33</a></span>
<span class=normal><a href=#__codelineno-31-34>34</a></span>
<span class=normal><a href=#__codelineno-31-35>35</a></span>
<span class=normal><a href=#__codelineno-31-36>36</a></span>
<span class=normal><a href=#__codelineno-31-37>37</a></span>
<span class=normal><a href=#__codelineno-31-38>38</a></span>
<span class=normal><a href=#__codelineno-31-39>39</a></span>
<span class=normal><a href=#__codelineno-31-40>40</a></span>
<span class=normal><a href=#__codelineno-31-41>41</a></span>
<span class=normal><a href=#__codelineno-31-42>42</a></span>
<span class=normal><a href=#__codelineno-31-43>43</a></span>
<span class=normal><a href=#__codelineno-31-44>44</a></span>
<span class=normal><a href=#__codelineno-31-45>45</a></span>
<span class=normal><a href=#__codelineno-31-46>46</a></span>
<span class=normal><a href=#__codelineno-31-47>47</a></span>
<span class=normal><a href=#__codelineno-31-48>48</a></span>
<span class=normal><a href=#__codelineno-31-49>49</a></span>
<span class=normal><a href=#__codelineno-31-50>50</a></span>
<span class=normal><a href=#__codelineno-31-51>51</a></span>
<span class=normal><a href=#__codelineno-31-52>52</a></span>
<span class=normal><a href=#__codelineno-31-53>53</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-31-1><a id=__codelineno-31-1 name=__codelineno-31-1></a><span class=k>using</span><span class=w> </span><span class=nn>System.Collections</span><span class=p>;</span>
</span><span id=__span-31-2><a id=__codelineno-31-2 name=__codelineno-31-2></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-31-3><a id=__codelineno-31-3 name=__codelineno-31-3></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-31-4><a id=__codelineno-31-4 name=__codelineno-31-4></a>
</span><span id=__span-31-5><a id=__codelineno-31-5 name=__codelineno-31-5></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AnimationTester</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-31-6><a id=__codelineno-31-6 name=__codelineno-31-6></a><span class=p>{</span>
</span><span id=__span-31-7><a id=__codelineno-31-7 name=__codelineno-31-7></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=n>SpriteRenderer</span><span class=w> </span><span class=n>spriteRenderer</span><span class=p>;</span>
</span><span id=__span-31-8><a id=__codelineno-31-8 name=__codelineno-31-8></a>
</span><span id=__span-31-9><a id=__codelineno-31-9 name=__codelineno-31-9></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Awake</span><span class=p>()</span>
</span><span id=__span-31-10><a id=__codelineno-31-10 name=__codelineno-31-10></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-31-11><a id=__codelineno-31-11 name=__codelineno-31-11></a><span class=w>        </span><span class=n>spriteRenderer</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>GetComponent</span><span class=o>&lt;</span><span class=n>SpriteRenderer</span><span class=o>&gt;</span><span class=p>();</span>
</span><span id=__span-31-12><a id=__codelineno-31-12 name=__codelineno-31-12></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-31-13><a id=__codelineno-31-13 name=__codelineno-31-13></a>
</span><span id=__span-31-14><a id=__codelineno-31-14 name=__codelineno-31-14></a><span class=w>    </span><span class=na>[WButton(&quot;Fade Out&quot;, groupName: &quot;Animations&quot;)]</span>
</span><span id=__span-31-15><a id=__codelineno-31-15 name=__codelineno-31-15></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=n>IEnumerator</span><span class=w> </span><span class=nf>FadeOutCoroutine</span><span class=p>()</span>
</span><span id=__span-31-16><a id=__codelineno-31-16 name=__codelineno-31-16></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-31-17><a id=__codelineno-31-17 name=__codelineno-31-17></a><span class=w>        </span><span class=n>Color</span><span class=w> </span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>spriteRenderer</span><span class=p>.</span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-31-18><a id=__codelineno-31-18 name=__codelineno-31-18></a><span class=w>        </span><span class=k>while</span><span class=w> </span><span class=p>(</span><span class=n>color</span><span class=p>.</span><span class=n>a</span><span class=w> </span><span class=o>&gt;</span><span class=w> </span><span class=mf>0f</span><span class=p>)</span>
</span><span id=__span-31-19><a id=__codelineno-31-19 name=__codelineno-31-19></a><span class=w>        </span><span class=p>{</span>
</span><span id=__span-31-20><a id=__codelineno-31-20 name=__codelineno-31-20></a><span class=w>            </span><span class=n>color</span><span class=p>.</span><span class=n>a</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>Time</span><span class=p>.</span><span class=n>deltaTime</span><span class=p>;</span>
</span><span id=__span-31-21><a id=__codelineno-31-21 name=__codelineno-31-21></a><span class=w>            </span><span class=n>spriteRenderer</span><span class=p>.</span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-31-22><a id=__codelineno-31-22 name=__codelineno-31-22></a><span class=w>            </span><span class=k>yield</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>null</span><span class=p>;</span>
</span><span id=__span-31-23><a id=__codelineno-31-23 name=__codelineno-31-23></a><span class=w>        </span><span class=p>}</span>
</span><span id=__span-31-24><a id=__codelineno-31-24 name=__codelineno-31-24></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Fade out complete&quot;</span><span class=p>);</span>
</span><span id=__span-31-25><a id=__codelineno-31-25 name=__codelineno-31-25></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-31-26><a id=__codelineno-31-26 name=__codelineno-31-26></a>
</span><span id=__span-31-27><a id=__codelineno-31-27 name=__codelineno-31-27></a><span class=w>    </span><span class=na>[WButton(&quot;Fade In&quot;, groupName: &quot;Animations&quot;)]</span>
</span><span id=__span-31-28><a id=__codelineno-31-28 name=__codelineno-31-28></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=n>IEnumerator</span><span class=w> </span><span class=nf>FadeInCoroutine</span><span class=p>()</span>
</span><span id=__span-31-29><a id=__codelineno-31-29 name=__codelineno-31-29></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-31-30><a id=__codelineno-31-30 name=__codelineno-31-30></a><span class=w>        </span><span class=n>Color</span><span class=w> </span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>spriteRenderer</span><span class=p>.</span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-31-31><a id=__codelineno-31-31 name=__codelineno-31-31></a><span class=w>        </span><span class=k>while</span><span class=w> </span><span class=p>(</span><span class=n>color</span><span class=p>.</span><span class=n>a</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mf>1f</span><span class=p>)</span>
</span><span id=__span-31-32><a id=__codelineno-31-32 name=__codelineno-31-32></a><span class=w>        </span><span class=p>{</span>
</span><span id=__span-31-33><a id=__codelineno-31-33 name=__codelineno-31-33></a><span class=w>            </span><span class=n>color</span><span class=p>.</span><span class=n>a</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>Time</span><span class=p>.</span><span class=n>deltaTime</span><span class=p>;</span>
</span><span id=__span-31-34><a id=__codelineno-31-34 name=__codelineno-31-34></a><span class=w>            </span><span class=n>spriteRenderer</span><span class=p>.</span><span class=n>color</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>color</span><span class=p>;</span>
</span><span id=__span-31-35><a id=__codelineno-31-35 name=__codelineno-31-35></a><span class=w>            </span><span class=k>yield</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>null</span><span class=p>;</span>
</span><span id=__span-31-36><a id=__codelineno-31-36 name=__codelineno-31-36></a><span class=w>        </span><span class=p>}</span>
</span><span id=__span-31-37><a id=__codelineno-31-37 name=__codelineno-31-37></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Fade in complete&quot;</span><span class=p>);</span>
</span><span id=__span-31-38><a id=__codelineno-31-38 name=__codelineno-31-38></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-31-39><a id=__codelineno-31-39 name=__codelineno-31-39></a>
</span><span id=__span-31-40><a id=__codelineno-31-40 name=__codelineno-31-40></a><span class=w>    </span><span class=na>[WButton(&quot;Pulse&quot;, groupName: &quot;Animations&quot;)]</span>
</span><span id=__span-31-41><a id=__codelineno-31-41 name=__codelineno-31-41></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=n>IEnumerator</span><span class=w> </span><span class=nf>PulseCoroutine</span><span class=p>()</span>
</span><span id=__span-31-42><a id=__codelineno-31-42 name=__codelineno-31-42></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-31-43><a id=__codelineno-31-43 name=__codelineno-31-43></a><span class=w>        </span><span class=n>Vector3</span><span class=w> </span><span class=n>originalScale</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>transform</span><span class=p>.</span><span class=n>localScale</span><span class=p>;</span>
</span><span id=__span-31-44><a id=__codelineno-31-44 name=__codelineno-31-44></a><span class=w>        </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mi>3</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>++</span><span class=p>)</span>
</span><span id=__span-31-45><a id=__codelineno-31-45 name=__codelineno-31-45></a><span class=w>        </span><span class=p>{</span>
</span><span id=__span-31-46><a id=__codelineno-31-46 name=__codelineno-31-46></a><span class=w>            </span><span class=n>transform</span><span class=p>.</span><span class=n>localScale</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>originalScale</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=mf>1.2f</span><span class=p>;</span>
</span><span id=__span-31-47><a id=__codelineno-31-47 name=__codelineno-31-47></a><span class=w>            </span><span class=k>yield</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=nf>WaitForSeconds</span><span class=p>(</span><span class=mf>0.2f</span><span class=p>);</span>
</span><span id=__span-31-48><a id=__codelineno-31-48 name=__codelineno-31-48></a><span class=w>            </span><span class=n>transform</span><span class=p>.</span><span class=n>localScale</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>originalScale</span><span class=p>;</span>
</span><span id=__span-31-49><a id=__codelineno-31-49 name=__codelineno-31-49></a><span class=w>            </span><span class=k>yield</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=nf>WaitForSeconds</span><span class=p>(</span><span class=mf>0.2f</span><span class=p>);</span>
</span><span id=__span-31-50><a id=__codelineno-31-50 name=__codelineno-31-50></a><span class=w>        </span><span class=p>}</span>
</span><span id=__span-31-51><a id=__codelineno-31-51 name=__codelineno-31-51></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Pulse complete&quot;</span><span class=p>);</span>
</span><span id=__span-31-52><a id=__codelineno-31-52 name=__codelineno-31-52></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-31-53><a id=__codelineno-31-53 name=__codelineno-31-53></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p><img alt="Animation buttons triggering visual effects" src=../../../images/inspector/buttons/animation-tester-coroutines.gif></p> <hr> <h2 id=using-wbutton-with-custom-editors>Using WButton with Custom Editors<a class=headerlink href=#using-wbutton-with-custom-editors title="Permanent link">&para;</a></h2> <h3 id=overview>Overview<a class=headerlink href=#overview title="Permanent link">&para;</a></h3> <p>WButton works automatically with:</p> <ul> <li>All Unity Objects (<code>MonoBehaviour</code>, <code>ScriptableObject</code>, etc.)</li> <li><strong>Odin Inspector's <code>SerializedMonoBehaviour</code> and <code>SerializedScriptableObject</code></strong> (when <code>ODIN_INSPECTOR</code> is defined)</li> </ul> <p><strong>When do you need <code>WButtonEditorHelper</code>?</strong></p> <p>Only when you create <strong>custom Odin editors</strong> that override the default behavior. For example, if you create a <code>CustomEditor</code> that inherits from <code>OdinEditor</code> for a specific type, you'll need to integrate WButton manually.</p> <hr> <h3 id=automatic-integration-with-odin-inspector>Automatic Integration with Odin Inspector<a class=headerlink href=#automatic-integration-with-odin-inspector title="Permanent link">&para;</a></h3> <p><strong>No setup required!</strong> WButton automatically works with Odin's base types:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-32-1> 1</a></span>
<span class=normal><a href=#__codelineno-32-2> 2</a></span>
<span class=normal><a href=#__codelineno-32-3> 3</a></span>
<span class=normal><a href=#__codelineno-32-4> 4</a></span>
<span class=normal><a href=#__codelineno-32-5> 5</a></span>
<span class=normal><a href=#__codelineno-32-6> 6</a></span>
<span class=normal><a href=#__codelineno-32-7> 7</a></span>
<span class=normal><a href=#__codelineno-32-8> 8</a></span>
<span class=normal><a href=#__codelineno-32-9> 9</a></span>
<span class=normal><a href=#__codelineno-32-10>10</a></span>
<span class=normal><a href=#__codelineno-32-11>11</a></span>
<span class=normal><a href=#__codelineno-32-12>12</a></span>
<span class=normal><a href=#__codelineno-32-13>13</a></span>
<span class=normal><a href=#__codelineno-32-14>14</a></span>
<span class=normal><a href=#__codelineno-32-15>15</a></span>
<span class=normal><a href=#__codelineno-32-16>16</a></span>
<span class=normal><a href=#__codelineno-32-17>17</a></span>
<span class=normal><a href=#__codelineno-32-18>18</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-32-1><a id=__codelineno-32-1 name=__codelineno-32-1></a><span class=cp>#if ODIN_INSPECTOR</span>
</span><span id=__span-32-2><a id=__codelineno-32-2 name=__codelineno-32-2></a><span class=k>using</span><span class=w> </span><span class=nn>Sirenix.OdinInspector</span><span class=p>;</span>
</span><span id=__span-32-3><a id=__codelineno-32-3 name=__codelineno-32-3></a><span class=cp>#endif</span>
</span><span id=__span-32-4><a id=__codelineno-32-4 name=__codelineno-32-4></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-32-5><a id=__codelineno-32-5 name=__codelineno-32-5></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Core.Attributes</span><span class=p>;</span>
</span><span id=__span-32-6><a id=__codelineno-32-6 name=__codelineno-32-6></a>
</span><span id=__span-32-7><a id=__codelineno-32-7 name=__codelineno-32-7></a><span class=cp>#if ODIN_INSPECTOR</span>
</span><span id=__span-32-8><a id=__codelineno-32-8 name=__codelineno-32-8></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MyComponent</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>SerializedMonoBehaviour</span>
</span><span id=__span-32-9><a id=__codelineno-32-9 name=__codelineno-32-9></a><span class=cp>#else</span>
</span><span id=__span-32-10><a id=__codelineno-32-10 name=__codelineno-32-10></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MyComponent</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
</span><span id=__span-32-11><a id=__codelineno-32-11 name=__codelineno-32-11></a><span class=cp>#endif</span>
</span><span id=__span-32-12><a id=__codelineno-32-12 name=__codelineno-32-12></a><span class=p>{</span>
</span><span id=__span-32-13><a id=__codelineno-32-13 name=__codelineno-32-13></a><span class=w>    </span><span class=na>[WButton(&quot;Test Button&quot;)]</span>
</span><span id=__span-32-14><a id=__codelineno-32-14 name=__codelineno-32-14></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TestMethod</span><span class=p>()</span>
</span><span id=__span-32-15><a id=__codelineno-32-15 name=__codelineno-32-15></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-32-16><a id=__codelineno-32-16 name=__codelineno-32-16></a><span class=w>        </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Button clicked!&quot;</span><span class=p>);</span>
</span><span id=__span-32-17><a id=__codelineno-32-17 name=__codelineno-32-17></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-32-18><a id=__codelineno-32-18 name=__codelineno-32-18></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <p>WButton will appear automatically in the inspector - no additional code needed!</p> <hr> <h3 id=integration-with-custom-odin-editors>Integration with Custom Odin Editors<a class=headerlink href=#integration-with-custom-odin-editors title="Permanent link">&para;</a></h3> <p>If you create a <strong>custom Odin editor</strong> for your type, you need to manually integrate WButton using <code>WButtonEditorHelper</code>:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-33-1> 1</a></span>
<span class=normal><a href=#__codelineno-33-2> 2</a></span>
<span class=normal><a href=#__codelineno-33-3> 3</a></span>
<span class=normal><a href=#__codelineno-33-4> 4</a></span>
<span class=normal><a href=#__codelineno-33-5> 5</a></span>
<span class=normal><a href=#__codelineno-33-6> 6</a></span>
<span class=normal><a href=#__codelineno-33-7> 7</a></span>
<span class=normal><a href=#__codelineno-33-8> 8</a></span>
<span class=normal><a href=#__codelineno-33-9> 9</a></span>
<span class=normal><a href=#__codelineno-33-10>10</a></span>
<span class=normal><a href=#__codelineno-33-11>11</a></span>
<span class=normal><a href=#__codelineno-33-12>12</a></span>
<span class=normal><a href=#__codelineno-33-13>13</a></span>
<span class=normal><a href=#__codelineno-33-14>14</a></span>
<span class=normal><a href=#__codelineno-33-15>15</a></span>
<span class=normal><a href=#__codelineno-33-16>16</a></span>
<span class=normal><a href=#__codelineno-33-17>17</a></span>
<span class=normal><a href=#__codelineno-33-18>18</a></span>
<span class=normal><a href=#__codelineno-33-19>19</a></span>
<span class=normal><a href=#__codelineno-33-20>20</a></span>
<span class=normal><a href=#__codelineno-33-21>21</a></span>
<span class=normal><a href=#__codelineno-33-22>22</a></span>
<span class=normal><a href=#__codelineno-33-23>23</a></span>
<span class=normal><a href=#__codelineno-33-24>24</a></span>
<span class=normal><a href=#__codelineno-33-25>25</a></span>
<span class=normal><a href=#__codelineno-33-26>26</a></span>
<span class=normal><a href=#__codelineno-33-27>27</a></span>
<span class=normal><a href=#__codelineno-33-28>28</a></span>
<span class=normal><a href=#__codelineno-33-29>29</a></span>
<span class=normal><a href=#__codelineno-33-30>30</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-33-1><a id=__codelineno-33-1 name=__codelineno-33-1></a><span class=cp>#if UNITY_EDITOR &amp;&amp; ODIN_INSPECTOR</span>
</span><span id=__span-33-2><a id=__codelineno-33-2 name=__codelineno-33-2></a><span class=k>using</span><span class=w> </span><span class=nn>Sirenix.OdinInspector.Editor</span><span class=p>;</span>
</span><span id=__span-33-3><a id=__codelineno-33-3 name=__codelineno-33-3></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEditor</span><span class=p>;</span>
</span><span id=__span-33-4><a id=__codelineno-33-4 name=__codelineno-33-4></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Editor.Utils.WButton</span><span class=p>;</span>
</span><span id=__span-33-5><a id=__codelineno-33-5 name=__codelineno-33-5></a>
</span><span id=__span-33-6><a id=__codelineno-33-6 name=__codelineno-33-6></a><span class=c1>// Custom editor for a specific type</span>
</span><span id=__span-33-7><a id=__codelineno-33-7 name=__codelineno-33-7></a><span class=na>[CustomEditor(typeof(MyComponent))]</span>
</span><span id=__span-33-8><a id=__codelineno-33-8 name=__codelineno-33-8></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MyComponentEditor</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>OdinEditor</span>
</span><span id=__span-33-9><a id=__codelineno-33-9 name=__codelineno-33-9></a><span class=p>{</span>
</span><span id=__span-33-10><a id=__codelineno-33-10 name=__codelineno-33-10></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=n>WButtonEditorHelper</span><span class=w> </span><span class=n>_wButtonHelper</span><span class=p>;</span>
</span><span id=__span-33-11><a id=__codelineno-33-11 name=__codelineno-33-11></a>
</span><span id=__span-33-12><a id=__codelineno-33-12 name=__codelineno-33-12></a><span class=w>    </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span>
</span><span id=__span-33-13><a id=__codelineno-33-13 name=__codelineno-33-13></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-33-14><a id=__codelineno-33-14 name=__codelineno-33-14></a><span class=w>        </span><span class=k>base</span><span class=p>.</span><span class=n>OnEnable</span><span class=p>();</span>
</span><span id=__span-33-15><a id=__codelineno-33-15 name=__codelineno-33-15></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>WButtonEditorHelper</span><span class=p>();</span>
</span><span id=__span-33-16><a id=__codelineno-33-16 name=__codelineno-33-16></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-33-17><a id=__codelineno-33-17 name=__codelineno-33-17></a>
</span><span id=__span-33-18><a id=__codelineno-33-18 name=__codelineno-33-18></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnInspectorGUI</span><span class=p>()</span>
</span><span id=__span-33-19><a id=__codelineno-33-19 name=__codelineno-33-19></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-33-20><a id=__codelineno-33-20 name=__codelineno-33-20></a><span class=w>        </span><span class=c1>// Draw WButtons at top (optional - based on your settings)</span>
</span><span id=__span-33-21><a id=__codelineno-33-21 name=__codelineno-33-21></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=p>.</span><span class=n>DrawButtonsAtTop</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
</span><span id=__span-33-22><a id=__codelineno-33-22 name=__codelineno-33-22></a>
</span><span id=__span-33-23><a id=__codelineno-33-23 name=__codelineno-33-23></a><span class=w>        </span><span class=c1>// Draw Odin inspector</span>
</span><span id=__span-33-24><a id=__codelineno-33-24 name=__codelineno-33-24></a><span class=w>        </span><span class=k>base</span><span class=p>.</span><span class=n>OnInspectorGUI</span><span class=p>();</span>
</span><span id=__span-33-25><a id=__codelineno-33-25 name=__codelineno-33-25></a>
</span><span id=__span-33-26><a id=__codelineno-33-26 name=__codelineno-33-26></a><span class=w>        </span><span class=c1>// Draw WButtons at bottom and process any invocations</span>
</span><span id=__span-33-27><a id=__codelineno-33-27 name=__codelineno-33-27></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=p>.</span><span class=n>DrawButtonsAtBottomAndProcessInvocations</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
</span><span id=__span-33-28><a id=__codelineno-33-28 name=__codelineno-33-28></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-33-29><a id=__codelineno-33-29 name=__codelineno-33-29></a><span class=p>}</span>
</span><span id=__span-33-30><a id=__codelineno-33-30 name=__codelineno-33-30></a><span class=cp>#endif</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=integration-with-standard-custom-editors>Integration with Standard Custom Editors<a class=headerlink href=#integration-with-standard-custom-editors title="Permanent link">&para;</a></h3> <p>For standard Unity custom editors:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-34-1> 1</a></span>
<span class=normal><a href=#__codelineno-34-2> 2</a></span>
<span class=normal><a href=#__codelineno-34-3> 3</a></span>
<span class=normal><a href=#__codelineno-34-4> 4</a></span>
<span class=normal><a href=#__codelineno-34-5> 5</a></span>
<span class=normal><a href=#__codelineno-34-6> 6</a></span>
<span class=normal><a href=#__codelineno-34-7> 7</a></span>
<span class=normal><a href=#__codelineno-34-8> 8</a></span>
<span class=normal><a href=#__codelineno-34-9> 9</a></span>
<span class=normal><a href=#__codelineno-34-10>10</a></span>
<span class=normal><a href=#__codelineno-34-11>11</a></span>
<span class=normal><a href=#__codelineno-34-12>12</a></span>
<span class=normal><a href=#__codelineno-34-13>13</a></span>
<span class=normal><a href=#__codelineno-34-14>14</a></span>
<span class=normal><a href=#__codelineno-34-15>15</a></span>
<span class=normal><a href=#__codelineno-34-16>16</a></span>
<span class=normal><a href=#__codelineno-34-17>17</a></span>
<span class=normal><a href=#__codelineno-34-18>18</a></span>
<span class=normal><a href=#__codelineno-34-19>19</a></span>
<span class=normal><a href=#__codelineno-34-20>20</a></span>
<span class=normal><a href=#__codelineno-34-21>21</a></span>
<span class=normal><a href=#__codelineno-34-22>22</a></span>
<span class=normal><a href=#__codelineno-34-23>23</a></span>
<span class=normal><a href=#__codelineno-34-24>24</a></span>
<span class=normal><a href=#__codelineno-34-25>25</a></span>
<span class=normal><a href=#__codelineno-34-26>26</a></span>
<span class=normal><a href=#__codelineno-34-27>27</a></span>
<span class=normal><a href=#__codelineno-34-28>28</a></span>
<span class=normal><a href=#__codelineno-34-29>29</a></span>
<span class=normal><a href=#__codelineno-34-30>30</a></span>
<span class=normal><a href=#__codelineno-34-31>31</a></span>
<span class=normal><a href=#__codelineno-34-32>32</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-34-1><a id=__codelineno-34-1 name=__codelineno-34-1></a><span class=cp>#if UNITY_EDITOR</span>
</span><span id=__span-34-2><a id=__codelineno-34-2 name=__codelineno-34-2></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEditor</span><span class=p>;</span>
</span><span id=__span-34-3><a id=__codelineno-34-3 name=__codelineno-34-3></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
</span><span id=__span-34-4><a id=__codelineno-34-4 name=__codelineno-34-4></a><span class=k>using</span><span class=w> </span><span class=nn>WallstopStudios.UnityHelpers.Editor.Utils.WButton</span><span class=p>;</span>
</span><span id=__span-34-5><a id=__codelineno-34-5 name=__codelineno-34-5></a>
</span><span id=__span-34-6><a id=__codelineno-34-6 name=__codelineno-34-6></a><span class=na>[CustomEditor(typeof(MyComponent))]</span>
</span><span id=__span-34-7><a id=__codelineno-34-7 name=__codelineno-34-7></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MyComponentEditor</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>Editor</span>
</span><span id=__span-34-8><a id=__codelineno-34-8 name=__codelineno-34-8></a><span class=p>{</span>
</span><span id=__span-34-9><a id=__codelineno-34-9 name=__codelineno-34-9></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=n>WButtonEditorHelper</span><span class=w> </span><span class=n>_wButtonHelper</span><span class=p>;</span>
</span><span id=__span-34-10><a id=__codelineno-34-10 name=__codelineno-34-10></a>
</span><span id=__span-34-11><a id=__codelineno-34-11 name=__codelineno-34-11></a><span class=w>    </span><span class=k>private</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span>
</span><span id=__span-34-12><a id=__codelineno-34-12 name=__codelineno-34-12></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-34-13><a id=__codelineno-34-13 name=__codelineno-34-13></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>WButtonEditorHelper</span><span class=p>();</span>
</span><span id=__span-34-14><a id=__codelineno-34-14 name=__codelineno-34-14></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-34-15><a id=__codelineno-34-15 name=__codelineno-34-15></a>
</span><span id=__span-34-16><a id=__codelineno-34-16 name=__codelineno-34-16></a><span class=w>    </span><span class=k>public</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnInspectorGUI</span><span class=p>()</span>
</span><span id=__span-34-17><a id=__codelineno-34-17 name=__codelineno-34-17></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-34-18><a id=__codelineno-34-18 name=__codelineno-34-18></a><span class=w>        </span><span class=n>serializedObject</span><span class=p>.</span><span class=n>Update</span><span class=p>();</span>
</span><span id=__span-34-19><a id=__codelineno-34-19 name=__codelineno-34-19></a>
</span><span id=__span-34-20><a id=__codelineno-34-20 name=__codelineno-34-20></a><span class=w>        </span><span class=c1>// Draw WButtons at top</span>
</span><span id=__span-34-21><a id=__codelineno-34-21 name=__codelineno-34-21></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=p>.</span><span class=n>DrawButtonsAtTop</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
</span><span id=__span-34-22><a id=__codelineno-34-22 name=__codelineno-34-22></a>
</span><span id=__span-34-23><a id=__codelineno-34-23 name=__codelineno-34-23></a><span class=w>        </span><span class=c1>// Draw your custom inspector</span>
</span><span id=__span-34-24><a id=__codelineno-34-24 name=__codelineno-34-24></a><span class=w>        </span><span class=n>DrawDefaultInspector</span><span class=p>();</span>
</span><span id=__span-34-25><a id=__codelineno-34-25 name=__codelineno-34-25></a>
</span><span id=__span-34-26><a id=__codelineno-34-26 name=__codelineno-34-26></a><span class=w>        </span><span class=n>serializedObject</span><span class=p>.</span><span class=n>ApplyModifiedProperties</span><span class=p>();</span>
</span><span id=__span-34-27><a id=__codelineno-34-27 name=__codelineno-34-27></a>
</span><span id=__span-34-28><a id=__codelineno-34-28 name=__codelineno-34-28></a><span class=w>        </span><span class=c1>// Draw WButtons at bottom and process invocations</span>
</span><span id=__span-34-29><a id=__codelineno-34-29 name=__codelineno-34-29></a><span class=w>        </span><span class=n>_wButtonHelper</span><span class=p>.</span><span class=n>DrawButtonsAtBottomAndProcessInvocations</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
</span><span id=__span-34-30><a id=__codelineno-34-30 name=__codelineno-34-30></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-34-31><a id=__codelineno-34-31 name=__codelineno-34-31></a><span class=p>}</span>
</span><span id=__span-34-32><a id=__codelineno-34-32 name=__codelineno-34-32></a><span class=cp>#endif</span>
</span></code></pre></div></td></tr></table></div> <hr> <h3 id=wbuttoneditorhelper-api>WButtonEditorHelper API<a class=headerlink href=#wbuttoneditorhelper-api title="Permanent link">&para;</a></h3> <p>The <code>WButtonEditorHelper</code> class provides several methods for different use cases:</p> <table> <thead> <tr> <th>Method</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>DrawButtonsAtTop(Editor)</code></td> <td>Draws buttons configured for top placement</td> </tr> <tr> <td><code>DrawButtonsAtBottom(Editor)</code></td> <td>Draws buttons configured for bottom placement</td> </tr> <tr> <td><code>ProcessInvocations()</code></td> <td>Processes any triggered button invocations</td> </tr> <tr> <td><code>DrawButtonsAtBottomAndProcessInvocations(Editor)</code></td> <td>Convenience method combining bottom drawing + processing (most common)</td> </tr> <tr> <td><code>DrawAllButtonsAndProcessInvocations(Editor)</code></td> <td>Draws all buttons in one location regardless of placement settings</td> </tr> </tbody> </table> <p><strong>Key Points:</strong></p> <ol> <li>Create one <code>WButtonEditorHelper</code> instance per editor (typically in <code>OnEnable</code>)</li> <li>Call <code>DrawButtonsAtTop</code> before your inspector content</li> <li>Call <code>DrawButtonsAtBottomAndProcessInvocations</code> after your inspector content</li> <li>Always call <code>ProcessInvocations()</code> after all button drawing is complete</li> </ol> <hr> <h3 id=single-location-button-drawing>Single Location Button Drawing<a class=headerlink href=#single-location-button-drawing title="Permanent link">&para;</a></h3> <p>If you prefer all buttons in one location regardless of placement settings:</p> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-35-1>1</a></span>
<span class=normal><a href=#__codelineno-35-2>2</a></span>
<span class=normal><a href=#__codelineno-35-3>3</a></span>
<span class=normal><a href=#__codelineno-35-4>4</a></span>
<span class=normal><a href=#__codelineno-35-5>5</a></span>
<span class=normal><a href=#__codelineno-35-6>6</a></span>
<span class=normal><a href=#__codelineno-35-7>7</a></span>
<span class=normal><a href=#__codelineno-35-8>8</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-35-1><a id=__codelineno-35-1 name=__codelineno-35-1></a><span class=k>public</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnInspectorGUI</span><span class=p>()</span>
</span><span id=__span-35-2><a id=__codelineno-35-2 name=__codelineno-35-2></a><span class=p>{</span>
</span><span id=__span-35-3><a id=__codelineno-35-3 name=__codelineno-35-3></a><span class=w>    </span><span class=c1>// Your inspector code here</span>
</span><span id=__span-35-4><a id=__codelineno-35-4 name=__codelineno-35-4></a><span class=w>    </span><span class=n>DrawDefaultInspector</span><span class=p>();</span>
</span><span id=__span-35-5><a id=__codelineno-35-5 name=__codelineno-35-5></a>
</span><span id=__span-35-6><a id=__codelineno-35-6 name=__codelineno-35-6></a><span class=w>    </span><span class=c1>// Draw all buttons at the end</span>
</span><span id=__span-35-7><a id=__codelineno-35-7 name=__codelineno-35-7></a><span class=w>    </span><span class=n>_wButtonHelper</span><span class=p>.</span><span class=n>DrawAllButtonsAndProcessInvocations</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
</span><span id=__span-35-8><a id=__codelineno-35-8 name=__codelineno-35-8></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h2 id=troubleshooting>Troubleshooting<a class=headerlink href=#troubleshooting title="Permanent link">&para;</a></h2> <h3 id=button-not-appearing>Button Not Appearing<a class=headerlink href=#button-not-appearing title="Permanent link">&para;</a></h3> <p><strong>Problem:</strong> Method has <code>[WButton]</code> but button doesn't show</p> <p><strong>Solutions:</strong></p> <ol> <li>Ensure method is <code>private</code> or <code>protected</code> (public methods may conflict)</li> <li>Verify the component is enabled and active</li> </ol> <hr> <h3 id=history-not-showing>History Not Showing<a class=headerlink href=#history-not-showing title="Permanent link">&para;</a></h3> <p><strong>Problem:</strong> Method returns a value but no history appears</p> <p><strong>Solutions:</strong></p> <ol> <li>Check <code>historyCapacity</code> - make sure it's &gt; 0</li> <li>Verify that the return type is serializable</li> <li>Check <code>UnityHelpersSettings.WButtonHistorySize</code> if using global setting</li> </ol> <hr> <h3 id=async-method-not-cancelling>Async Method Not Cancelling<a class=headerlink href=#async-method-not-cancelling title="Permanent link">&para;</a></h3> <p><strong>Problem:</strong> Cancel button doesn't stop an async method</p> <p><strong>Solutions:</strong></p> <ol> <li>Ensure method accepts <code>CancellationToken</code> parameter</li> <li>Check token periodically: <code>ct.ThrowIfCancellationRequested()</code></li> <li>Pass token to async operations: <code>await Task.Delay(1000, ct)</code></li> </ol> <div class="language-csharp highlight"><table class=highlighttable><tr><th colspan=2 class=filename><span class=filename>C#</span></th></tr><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-36-1> 1</a></span>
<span class=normal><a href=#__codelineno-36-2> 2</a></span>
<span class=normal><a href=#__codelineno-36-3> 3</a></span>
<span class=normal><a href=#__codelineno-36-4> 4</a></span>
<span class=normal><a href=#__codelineno-36-5> 5</a></span>
<span class=normal><a href=#__codelineno-36-6> 6</a></span>
<span class=normal><a href=#__codelineno-36-7> 7</a></span>
<span class=normal><a href=#__codelineno-36-8> 8</a></span>
<span class=normal><a href=#__codelineno-36-9> 9</a></span>
<span class=normal><a href=#__codelineno-36-10>10</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-36-1><a id=__codelineno-36-1 name=__codelineno-36-1></a><span class=c1>// ✅ CORRECT: Cancellable</span>
</span><span id=__span-36-2><a id=__codelineno-36-2 name=__codelineno-36-2></a><span class=na>[WButton(&quot;Long Task&quot;)]</span>
</span><span id=__span-36-3><a id=__codelineno-36-3 name=__codelineno-36-3></a><span class=k>private</span><span class=w> </span><span class=k>async</span><span class=w> </span><span class=n>Task</span><span class=w> </span><span class=nf>LongTaskAsync</span><span class=p>(</span><span class=n>CancellationToken</span><span class=w> </span><span class=n>ct</span><span class=p>)</span>
</span><span id=__span-36-4><a id=__codelineno-36-4 name=__codelineno-36-4></a><span class=p>{</span>
</span><span id=__span-36-5><a id=__codelineno-36-5 name=__codelineno-36-5></a><span class=w>    </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mi>100</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>++</span><span class=p>)</span>
</span><span id=__span-36-6><a id=__codelineno-36-6 name=__codelineno-36-6></a><span class=w>    </span><span class=p>{</span>
</span><span id=__span-36-7><a id=__codelineno-36-7 name=__codelineno-36-7></a><span class=w>        </span><span class=n>ct</span><span class=p>.</span><span class=n>ThrowIfCancellationRequested</span><span class=p>();</span><span class=w>  </span><span class=c1>// Check token</span>
</span><span id=__span-36-8><a id=__codelineno-36-8 name=__codelineno-36-8></a><span class=w>        </span><span class=k>await</span><span class=w> </span><span class=n>Task</span><span class=p>.</span><span class=n>Delay</span><span class=p>(</span><span class=mi>100</span><span class=p>,</span><span class=w> </span><span class=n>ct</span><span class=p>);</span><span class=w>  </span><span class=c1>// Pass token</span>
</span><span id=__span-36-9><a id=__codelineno-36-9 name=__codelineno-36-9></a><span class=w>    </span><span class=p>}</span>
</span><span id=__span-36-10><a id=__codelineno-36-10 name=__codelineno-36-10></a><span class=p>}</span>
</span></code></pre></div></td></tr></table></div> <hr> <h2 id=see-also>See Also<a class=headerlink href=#see-also title="Permanent link">&para;</a></h2> <ul> <li><strong><a href=../inspector-overview/ >Inspector Overview</a></strong> - Complete inspector features overview</li> <li><strong><a href=../inspector-grouping-attributes/ >Inspector Grouping Attributes</a></strong> - WGroup layouts</li> <li><strong><a href=../inspector-settings/ >Inspector Settings</a></strong> - Configuration reference</li> <li><strong><a href=../../editor-tools/editor-tools-guide/ >Editor Tools Guide</a></strong> - Other editor utilities</li> </ul> <hr> <p><strong>Next Steps:</strong></p> <ul> <li>Add buttons to your components for quick testing</li> <li>Experiment with <code>groupName</code> to organize buttons</li> <li>Try async methods with <code>CancellationToken</code> support</li> <li>Customize colors in <code>UnityHelpersSettings.asset</code></li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 26, 2026 05:34:01 UTC"><span class=timeago datetime=2026-01-26T05:34:01+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 26, 2026 05:34:01 UTC">2026-01-26</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="December 25, 2025 20:02:30 UTC"><span class=timeago datetime=2025-12-25T20:02:30+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="December 25, 2025 20:02:30 UTC">2025-12-25</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../inspector-overview/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Overview"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Overview </div> </div> </a> <a href=../inspector-grouping-attributes/ class="md-footer__link md-footer__link--next" aria-label="Next: Grouping Attributes"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Grouping Attributes </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2024-2026 Wallstop Studios - MIT License </div> </div> <div class=md-social> <a href=https://github.com/wallstop/unity-helpers target=_blank rel=noopener title="Unity Helpers on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../../..", "features": ["navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.expand", "navigation.path", "navigation.indexes", "navigation.top", "navigation.footer", "toc.follow", "toc.integrate", "search.suggest", "search.highlight", "search.share", "header.autohide", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.tooltips", "content.action.edit", "content.action.view"], "search": "../../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@10/dist/mermaid.min.js></script> </body> </html>