Delen via


Best practices voor mesh-visualscripts voor prestaties

Overzicht

Visuele scripts zijn niet inherent traag, maar ze zijn aanzienlijk langzamer dan bijvoorbeeld C#-code.

Wanneer u visuele scripts in uw omgeving maakt, kunt u deze het beste gebruiken om bestaande functionaliteit te verbinden, niet voor zware werkbewerkingen: lijm maken, niet girders. De eenvoudigste manier om ervoor te zorgen dat uw visuele scripts niet van invloed zijn op de algehele prestaties van uw omgeving, is ervoor te zorgen dat ze helemaal niet veel doen.

Scriptgebeurtenissen met een hoge en lage frequentie

Visual Scripting biedt een breed scala aan gebeurtenissen die u kunt gebruiken om visuele scriptstromen te activeren.

Probeer het volgende te voorkomen:

  • Bij update, bij vaste update, bij late update en vergelijkbaar. Deze gebeurtenissen activeren zeer vaak (vaak met dezelfde snelheid als renderframes) en zelfs als uw script niet veel doet, heeft zelfs een overhead die merkbaar invloed kan hebben op de prestaties van uw omgeving als dit op veel plaatsen tegelijk gebeurt.

  • Bij trigger verblijf en bij botsing blijven. Hoewel deze gebeurtenissen alleen actief zijn onder bepaalde omstandigheden (bijvoorbeeld wanneer een fysicaobject zich in een fysicatriggervolume bevindt of een collider aanraakt), terwijl deze voorwaarden worden gegeven, worden ze zeer vaak geactiveerd.

Er is geen directe voorkeursvervanging voor deze gebeurtenissen met een hoge frequentie. Ze zijn niet uitgeschakeld, dus u kunt ze gebruiken als het absoluut noodzakelijk is, maar we raden u aan om te proberen gebruik te maken van ingebouwde functionaliteit, zoals het Component Van Azure, dat kan worden beheerd door visuele scripts, of om uw scriptlogica te herstructureren om reactief te zijn in plaats van actief, bijvoorbeeld door bij status gewijzigde gebeurtenissen te gebruiken.

Als u deze gebeurtenissen met hoge frequentie niet kunt voorkomen, kunt u de impact ervan mogelijk verminderen door het hele scriptmachineonderdeel inactief te houden wanneer dit niet nodig is. Een ander visueel script kan scriptmachineset | ingeschakeld gebruiken om een volledige scriptgrafiek uit te schakelen en in te schakelen. Terwijl deze functie is uitgeschakeld, worden geen van de gebeurtenisknooppunten geactiveerd en zijn er geen runtimekosten.

Deze zijn enigszins gevaarlijk voor prestaties, maar soms noodzakelijk:

  • Bij aanrijding enter en bij aanrijdingsuitgang. Normaal gesproken worden deze gebeurtenissen slechts eenmaal geactiveerd wanneer een fysica lichaam de collider raakt, en nogmaals wanneer het stopt met aanraken. Soms loopt een fysica lichaam echter vast tussen twee bots; In dat geval kan het snel heen en weer jitteren, waardoor veel On Collision-gebeurtenissen snel achter elkaar worden veroorzaakt. U wordt aangeraden in plaats daarvan Bij trigger-gebeurtenissen te gebruiken.

Deze zijn in bepaalde situaties in orde:

  • Met Interval kunt u scriptstromen activeren in aanpasbare intervallen (bijvoorbeeld eenmaal per seconde) die zijn gedefinieerd via de instelling Interval . U kunt de instelling Vertraging gebruiken om de uitvoering van verschillende Interval-gebeurtenissen met hetzelfde interval te spoteren.

  • Het timerknooppunt is geen gebeurtenis, maar activeert de Tick-poort eenmaal per frame voor de duur van de timer zodra deze is gestart door de beginpoort in te voeren. Wanneer de timer niet wordt uitgevoerd, zijn er geen runtimekosten.

Probeer deze gebeurtenissen niet te gebruiken om te controleren of bepaalde variabelen, eigenschappen of voorwaarden zijn gewijzigd. In plaats daarvan is het beter om een gebeurtenis On State Changed te gebruiken om te luisteren naar wijzigingen tegen nul niet-actieve kosten.

Deze zijn altijd in orde om te gebruiken:

  • Bij Status gewijzigd worden alleen geactiveerd als en wanneer een van de invoerpoorten de waarde ervan wijzigt. Voor scriptvariabelen en onderdeeleigenschappen wordt dit zeer efficiënt geïmplementeerd op een manier waardoor er geen runtimekosten in rekening worden gebracht zolang er niets verandert.

  • Bij Status gewijzigd kan ook worden gebruikt om complexere invoerwaarden (bijvoorbeeld de resultaten van een berekening) te observeren die vereisen dat de invoer eenmaal per frame opnieuw wordt geëvalueerd om te bepalen of deze is gewijzigd. U moet de optie Polling toestaan inschakelen om deze functie in te schakelen. De gebruikersinterface voor scriptbewerking informeert u hierover en waarschuwt u over de mogelijke gevolgen voor de prestaties. Toch is het nog steeds een beetje efficiënter dan om uw eigen pollinglogica te scripten met behulp van een gebeurtenis Bijwerken .

  • Bij woordenlijstitem toegevoegd en bij woordenlijstitem verwijderd werkt op een vergelijkbare manier en hebben nul runtimekosten zolang er niets verandert.

  • Bij Trigger Enter en Bij afsluiten van trigger hebben geen van de mogelijke prestatierisico's van de bijbehorende aanvaringsevenementen (zie hierboven).

Volgende stappen