PKF]GJ¦ ¦ UI/hud.aeuiAEUI 5 10 11 0 800 600 0 1 0 0 0 0 0.00499999989 1 1 0 0 "Hearts" "" 0 0 0 0 24 24 184 72 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 2 1 6 "Empty1" "" 0 0 0 0 0 0 48 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-empty.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 3 1 6 "Heart1" "" 0 0 0 0 0 0 48 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-full.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 4 1 6 "Empty2" "" 0 0 0 0 56 0 104 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-empty.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 5 1 6 "Heart2" "" 0 0 0 0 56 0 104 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-full.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 6 1 6 "Empty3" "" 0 0 0 0 112 0 160 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-empty.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 7 1 6 "Heart3" "" 0 0 0 0 112 0 160 48 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "Images/heart-full.png" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 8 0 1 "Status" "Vida: 3/3" 0 0 0 0 24 80 320 116 0 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 9 0 2 "Damage" "Dano" 0 0 0 0 24 124 124 168 4281613385 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" 10 0 2 "Heal" "Cura" 0 0 0 0 136 124 236 168 4281613385 4293849589 4285574389 18 4 0 0 1 1 1 1 0 0 0 0 0 0 8 8 8 8 8 8 3 2 0 "" 1 4294967295 0 0 0 0 0 0 0 0 1 0.300000012 0 0 0 1 1 0 0 1 1 0 0 0.119999997 1 0 0 1 1 4294967295 0 0 0.939999998 1 4294967295 0 0 1 0.449999988 4294967295 "" 0 0 0 80 80 28 0.119999997 0 1 1 0.119999997 1 1 "" "" PKF]õ….Ù  Images/heart-full.png‰PNG  IHDR@@ªiqÞ ÖIDATxœí[kl]W•^kïó¸Oû:Œ›4Iq§Ò”©Ú‚A›Ðò(P2E“ª´b¤ ( HÉHE ~P‹©LÕg(UKKÑ8%(I›¶CSÓ6OÛiœÆyØ÷æ¾Îcï½Fëœ{]ǯøq�¦�O:öñÞûìý}ë¬ýZûà2.ã2.ã2þ~��ªˆˆ†êBDjT½»�)‘¡N²ˆHÒC‘ˆÒ;;-Ú¶ML»�mÛDT×E$Fµ§s~Ã^äA£ÈD郃9êím¡îîĨ¼˜è¤IÖÅ�J?x¦‰zó-ÔÕŸãÁÜ`ŠÀI“â²Dˆˆ†ÿ.¿Ö;ßMY[Œ¦õ°Ðhs5!äѶz°×¨p§öÎÔ’ù½5’õ„í +S9z¢Mšpƒ°ì †h1©p…ÁoÜ–8J€ýBâ.¿¢:ÒËÛNÔ ˆlmj˜ˆHÔ…‡GúnD)î1Zß`·äæDŒ Ç 5€ëà *• îªá·™dL�ít~ŽLÇVF$6®“´ï¢ÏZ©T&ªÏ€ªäÚ€JXvÜsÌ)÷’6÷Ùí žAD0Æ qž‘¨&žûb°èêï8©ô×Á’`<‚ü9¥{Ž#+ Žõ L%BErÑBBÇ!kñB´æä¤´ïŸ2¡º×Y²àGµ.Äî¡Ö="ï Žö}YØÖ·¥ë^¡�5�תû8Q ê~C cU<°Þ½À`6Ü–“k²D" 4•ò÷ûú×þ}ËŽº££CnÙ²EOÛT_záÕ+­-;d:ýÿìY­ ì~I¨—_C3�òCZØKt�óç‚»i=9×­Ô¶”º.¨JéÖÏÜÛG¸èvÀàξÇ�¦¦›Mµ Jk¼Ô%ý§w¡>Ñ·AÄ�@Ämˆ99°®]NκëŒli·µUêRñIïôà2«W¼9Ü{§dª=è¿~d•Ì4=%•ºÒìÚgUó R0ᑉªâ_L’¥ñx†�gÝu�üç[3)í¦³VP.=é,^ð‰xh‰yÝ}¿sRé›ýJIQ©"«¿zƒÝ/8 mGF�êçß±ß �<0“†ä§ngýå:®¥¥|³Z:·9ûžöýÇÏéNžtƒªyÆÉdÖ¡Vù­íwî�3)î—,x\óbT–J•èM%nü 8®Ýhµ«§Oý µlñ=\¬r û¾dë_õÏœƒ�ÏÙÞ3ö,̤b‘lC°± �»ñHn½5tl×J¥=NRÜóæù ÇZ;à8°QU^=º-9ÞöêÑî0Üó¶÷äθ78©‘�¨êƒH§ ¹õ“ä^»BÙÙ¬ k8ÛÎ6ï ‹ÅÐùU«úÈchÊÀ¤  /8†�o~!�¸yØkÿ)L.YlWOœÜžZ±ä?êšF>&ÆÏiºt û}v:ù5Z9fU~õÄ[ÖžŠx†6‘ æ?õ' O�‘F+vâ{ùâ{Nã¼i‰�‰ÇÜ�¹2gæÎX ³ký"ƨŠGc’R~ÃJ¤šƒ#½äÿþYÉDìúS?ÂêP¨^J…€€›øâû(íPÏôÄŸgæÊœ™»•H6K‰ß¬¹ÿ(�ç? Ú?Ôû^[ÚŸP&4áK]RõöÅs;÷Ç™ÀðTéï~h $D| ¢´hm@Ì•93w ÚXhÝ\=л„µ�ô1âñèoCô9ÙÒœ �¿iügŸGtœé¿ùáà:, LÿžÐ’€R@ðÜËQç5ªæì?ûÇN+ל&ÒwÔr'4€áH´†k1gÑä À Ÿ†‹ÙESgx¨'곘JBx¸'žN'·z�¤¡%˜ü9`  ¨åš ‚V4¡9=8s—Õ²œ<úøIðþ° ̉~@^@5ÌÈ5‚H{±¶ó` ñªmtò]ÇrIWS€)œ¼¼Œ�~;E(?ô? v/oæþu0g¥# ¬ˆÖþúFSnå»jZ£ÆF{@ ÁEÀxJ‰®Ù¨£o¦S�_G�?k(Ö´�ñVYö¹÷-*À_yù)ç¾Ë€5�y²üœI¬&gäi"Ò€¼s芴Å3ÝPƒb)6@íÖš2C[ÎYÁ,v<ÈfY‚Aª/…ñ‚Ó "ý/B¹pYóçáìu…Ùs B�WÎyÕ<0^@†èñzîDÐü#ôÌ/ógÏ:s[¥óáuíêÞa`ÎîGÖ‘;ï ©ò…3©ÄœŽZ®×�2»ª½_iý#aì÷_kdÛ‚hËo{/qðîÓó�93÷hí‡t?¶åká¶óú�§g¢1â§añ\`gR"±ùCï´Þ`ŽÆsfîa±¸vò'µÌQƒŽõ8ˆ0ÝÕvÊh½S ­e톣;TõfwPœ)x_Qõ¢HTÄYØÈ`ß§Ç ŠˆqªBÜ‚Zhü– ®C©Ï& j€R—æx-|TÄ1âê:q×ø-Ö2žûбëŠzŽt–·½V*ßpæÍ³¬eKTbÓú·bs—’j+UæÆ™+sޏ/o{q¢p¼˜ ZÃnãÉTaðy'Ô–}ýµ:}÷–x@¼TŒPïùÀܘ#seÎ̽¶ý7À Ư7-qåÜÒ™¾ÓÁœNärÒÙx½NßuÛ¥a„áâïº ˜sd®Ì™¹×2fpÔݧÜuàýnsóS¨©%´¥ ;÷Šòþwnäfi:â?Øo0v¨Iô …Íé•ËžŸÌIN¦­!#¼rd�›Ë<�ÚÄFعW”ÜÅ磘A£·Îã�×#JG}>}÷gÁÞP/ý|iSúšö}“ϘÊ�eUne îzA–ÿë1 ¥âø}-2;«S]F1…ô¿|ìõ«µ9Bü˜à±€Siû<#´dž–-�@­÷Êâ}Uªq—˜nPs2áu>I%!{ÏÝ —¶iÇ€ÔHþ`ióTÅ3¦´ªáŠù›nÈÌoTD»”R¶_2!Ñ”�KrKÑÙ‚µµÕ~UèK*Ò»U¾°ž9uvvNIª?¸ÝBÄupî± U É�ÑÐØHúÊa¹:nô'„B´q�dR<ŽE3w—Ï÷ (.#‘PÈ.Û^N‘”•ï >¿,Ã�y“'K¯Ç-óNšL2‡ cHÞ6ŒziÛ‹]'Œ~.9„°;9NH§w™ûî"Šò°¢iÀhª¯ç¥?ü(u=NJ~ü�º47´F[उEv0'Oš(ƒ99 hnË3ÖúÄ{Þ³ `Õ*^TTÄ x¿ “â£ßü0Ò=,kóú¦µ†B¼¶¾Ö®ûˆñ%©©­]�lÛ—êÊ(x=|.üvö,yÙ…p`LÁ§fÇb+”W_œ‹ÜE-"Ö-· 2f sA{CñFöꊷÈÎÊ*ˆé:.À´LPeàñ¸aÔˆápáyÓäU3.#†ßðáL´D×éoóŸyÒþö½·O�ÉŠÆö]ù,�±^šæHöì5ïÿKYþâKŽ4�×ëUQ€RìÕÎ#!º8ç`š&Ä ®šq9<4÷�2;#ƒ+>Ÿbé±uêæQWÂÌä8]Ä:«æ}Õí™aÇbvcs3[¶üodíº�À­iàr¹€±ÄüF NEÒ©(„˶!‹AV0æÞq\}å¶[u¡³÷ë-ÍÓ“Æ•ôäÒ�xLgP[«Ùºý‰âœBXKŸxJ]ñîj Œ�ær9"‘LwpCDšš`ÔˆpË pÃ5W[Þ!9j<zÖ31w.–ÓË«–»srîŽ5„¬•«×¨¯­,‚šÚZff:öQh·O�Ç9†i‚àf_{ Ìð> (SíhËWŠG¹FŒ0ð™tµw Ý8@!„ØÑí; }#F/Ú_^n­ùh½úòo:„° öDª#°|´µ23PøÀýò‚ó¦Ùî@†jµ4MÅ|5�¹%ÞÒlmüâKåÑ'Ÿ"MÍ-à÷ùœ!Õ[ ³±<:äö97ÁÕ—O·FNœ¨¶Öî[äŸ4þÑ”¦Nõ ³xLãÑòÊS]ï=èÖ­¥eʲçþî4‚Þî‹xó{½ij†WÞ\AöîÝÇ,nc7^ŒÞcæa,Ûñä„Ü�#rEÎÈ5 ÔÔÕþ…va gc©06OÕ<™•eeò¥7Þ ŸÏñnO]¾G'p¿¾ùþ{Xÿi1%Îð�ËðÂ{LÃ<,ƒeû䆑+rFî¨Aal~²ûwêñ´ƒœ,¸ñSõÉŒ±+�ññÆÏXYùðx<}~ò�sF†ß«?\ õõÎà ï1 ó°Ì@€‘+rþ¸ø3Œ BÈ ½¼úÔÖ±Ðõ�¿…”³”ìlÏî�;ÅÊ5ï�¦ X|ê áŒ^µg|øñ¿�iUuî1 óúÛÃ:9AÓ`åÚ÷jpeeù¸äs’Ù=:@$ ð©¸�¬©­#õBi#†@;¸t~ûý÷@(ð÷%% 0–Ö6�s}(55µ… Ó’Ù=I¥‹ÊJl{%²!{÷Õ8œtÂ!§ªPQ½*vî‚­Û¶ÁΊJÐ4-mH‡ÓÞšg»LðKéÖ2ù¢)ÝTUr&ØÔ…BÔ²,gbIœeTU�§óÈcË`óÖ­àq»§¤Óȹ£Ô" Lm*Û“ÌûUcR«ÓXçeÐâ‚´àË I§ø6rIG|WVÁŒ PÓ,¾­�ü ЂÚ:–¡í Kœ!ƒ§æ6I e ¨�{Ü1Xäøä¹ƒbß™kÔ„`ØÑeiB›³Òµ5H;VÄL`b�œììÄ|��Ž•¥[HépG øV)eÛV˜üì2()| Ü&'Ž'ñ�N7 g‡u´¹"çñ¹¹0aü8zgÁ’Ù=:€ão¡PCpÌvsÁLiæ Ìƒ䊜o¾~¦Ì:n 3Ãá�×�]”ÌæÝ:€$æÈW'¸x£<3.¹XœÜ‰ò‰C9!7äˆ\‘3rG ¨¥»Øí*1ùÖÄ|“Ç~kÅbó2G�VN;ãtûw7Î=w–¯#i8$£À7äˆ\‘3rG =…ãivv›&Óó;ÙlèºrÅ¥—ðÇYèL2©wïÃ�TŒ9!7äˆ\‘3rO¾þö=(ŠH�›ý_~7,gÌðREU‡cü�wÞe —,Ÿ×;  I:Å/Y8®»îZœ3Û²„öÖå�œvj}¿£Â)¤ºOkiùY®ŒÌõ’‹,Õãï¼»š¦œ€ãoPwu] Õf›øk¯–§„ѰÙÜ4Ý—7qsoN¢Hoks¶]Sµ ƒ°í,Õãqœ°`ñcNßñ•P<†Ãu]‡Ç^�¯Sª(a#½Ì7eÜ–ÞˆGôåÀÒ‰ª¶9�ó,Õíækßÿ€-~òi0,ˉá4¤Õ›¥Ï4U…‡¸®ºò7ÜŠÇe¬½ø.#À]�ô¥ñƒœ�åß@„Ì¢.ßVRÂ~?÷>hniqKË (A2xiùÓ0å”|.M‹ �F8:½¯â}ZÐÑ0~€ ÅÑ %ÀçÀ›2%ÏzyùÓΛÆÿñ ÝH�-`ØÖ”¼< ¸d\ÊMv¤é|äT\\Ü'ñˆ~­c©ñÙTší=d=óz§Bloxým9iÌyú„|çÂ{LÃ<,ã”M|,éÔLŽt0�·[Ÿ‰kºÜ6Œ-"n°K/¾ˆß:ûgÌã…÷˜†yX˦zç@Öø#2ù[¾ün˜Yµ¯Vî­—ñŠ=üÒ³/”xá=¦a–i_g°¡ŠFRûBH½þî94ÀVkn�çÁ»þàäkn�äÜŽòX|N ÅIûlD@&Îç!þSÕó².,eU�í\ua‰iíË*ÐCÙX2ÐJ¡ÿ´MC7mLÛ&Ü4tLKn«�þ1ßRŸÁ?U9½`ƒßQµ²}Þ¡=Ô :: )—ìyÛ4uðS”‡ôŸ7dR¬¾}çEÆŽÝ·¶OûÅ@¶[æ§xåp5ì,�ø/.C‡’ÿË%ïŽáàhÀÿ<ý™AB8óIEND®B`‚PKF]¡ñ•àôô README.txtASTRA DOCS — HUD DE CORAÇÕES Snapshot C# 06/10/2026 Tutorial completo: https://astraengine.com.br/pt-br/snapshot-2026-10-06/ui/hud-coracoes/ Este pacote contém um documento de UI, duas imagens PNG e três scripts de exemplo. Não é um APK nem um projeto/cena completo importável por um único clique. Não contém fontes da engine. 1. Coloque Images/heart-full.png e Images/heart-empty.png na pasta Images do seu projeto. 2. Coloque UI/hud.aeui na pasta UI. Na área Interface, informe UI/hud.aeui e use Abrir; depois Salvar para registrá-lo como recurso do projeto. 3. Adicione os três arquivos .cs à área de código e compile o projeto. 4. No objeto Jogador, anexe PlayerHealth. No objeto HUD, anexe Canvas UI e HeartHud. 5. Atribua o recurso UI/hud.aeui no Canvas UI e use Apresentação = Tela. 6. Atribua Jogador no campo Player do HeartHud. Salve a cena e a UI. 7. Entre em Play. Dano/Cura mudam a vida e os corações; Interagir não executa o C#. 8. HeartDamageTrigger é opcional: anexado a uma zona de sensor 3D, retira vida na entrada. Exige participação física 3D do jogador e PlayerHealth no objeto resolvido pelo evento. Vida começa em 3, limita dano/cura a 0–3 e reinicia ao reabrir Play. Não implementa respawn, invulnerabilidade, meio coração ou save persistente. O .aeui foi produzido pelo serializer nativo e relido com 10 elementos válidos. Compilação dos scripts é registrada separadamente no manifesto de exemplos. Esta edição de documentação não executou o cenário em aparelho físico. As imagens e os scripts foram autorados para este tutorial. A política de redistribuição acompanha a política editorial do portal; uma licença pública não foi definida. O pacote não concede licença dos fontes da engine. PKF]¬ðhPlayerHealth.csusing System; using Astra; [ComponentId("docs.player-health")] public sealed class PlayerHealth : Behavior { public const int Capacity = 3; public int Current { get; private set; } public bool IsDead => Current == 0; public override void Awake() => Current = Capacity; public void TakeDamage(int amount) { Current = Math.Max(0, Current - Math.Clamp(amount, 0, Capacity)); } public void Heal(int amount) { Current = Math.Min(Capacity, Current + Math.Clamp(amount, 0, Capacity)); } } PKF]@øº:: HeartHud.csusing System; using Astra; [ComponentId("docs.heart-hud")] public sealed class HeartHud : Behavior { [PropertyId("player")] public ObjectReference Player; private GuiAccess hud = null!; private PlayerHealth health = null!; private readonly GuiElement[] hearts = new GuiElement[PlayerHealth.Capacity]; private GuiElement status; private int lastHealth = -1; public override void Start() { var player = Resolve(Player) ?? throw new InvalidOperationException("Atribua Jogador ao campo Player do HeartHud."); health = player.GetBehavior() ?? throw new InvalidOperationException("Jogador precisa de PlayerHealth."); hud = Gui.ForCanvas(Object); for (int i = 0; i < hearts.Length; ++i) { hearts[i] = hud.Find($"Heart{i + 1}"); if (hearts[i].Kind != GuiKind.Image) throw new InvalidOperationException($"Heart{i + 1} precisa ser Image."); } status = hud.Find("Status"); hud.Find("Damage"); hud.Find("Heal"); Refresh(); } public override void Update(float deltaTime) { // Este script é o consumidor da fila deste Canvas. while (hud.Poll(out var message)) { if (message.Kind != GuiEventKind.Click) continue; if (message.Element.Name == "Damage") health.TakeDamage(1); else if (message.Element.Name == "Heal") health.Heal(1); } if (lastHealth != health.Current) Refresh(); } private void Refresh() { lastHealth = health.Current; for (int i = 0; i < hearts.Length; ++i) hearts[i].Visible = i < lastHealth; status.Text = $"Vida: {lastHealth}/{PlayerHealth.Capacity}" + (health.IsDead ? " | Sem vida" : ""); } } PKF]ÀÂíÕüüHeartDamageTrigger.csusing Astra; [ComponentId("docs.heart-damage-trigger")] public sealed class HeartDamageTrigger : Behavior { public override void TriggerEnter(ObjectReference other) { Resolve(other)?.GetBehavior()?.TakeDamage(1); } } PKF]GJ¦ ¦ UI/hud.aeuiPKF]õ….Ù  Ï Images/heart-full.pngPKF]Ejéª ª Images/heart-empty.pngPKF]¡ñ•àôô ï(README.txtPKF]¬ðh 0PlayerHealth.csPKF]@øº:: V2HeartHud.csPKF]ÀÂíÕüü¹9HeartDamageTrigger.csPK±è: