I’ve been working on creating performant client side animations/effects. So far I’ve created a plugin that allows me to tag my selections using collectionservice and give those parts attributes. I use the attributes as properties (e.g. the radius to activate, the speed of the animation) to customize the effects. To make the effects performant I’m using some “chunk” logic to only search around the player, meaning all of these effects can be scaled massively without performance hits. Besides the animated effects, there is also an initializer. The initializer gives light sources to all neon parts, but it also makes light sources, textures and screenguis invisible when parts become fully transparent so you don’t get “ghost” light sources or floating textures. You can see this right away with the scrolling sign. Another cool light feature is the flicker effect using noise. You can set a deviance amount (e.g. 25% deviance from max brightness) and speed to really control how intense and fast the flickering is. The flickering lamp example had a deviance of 50% and a relatively slow speed, creating a cool old streetlight effect. Finally, the last cool modifier is the cframe angle property which allows me to add additional information to the grow and move animations. This causes cool turning effects during the animation, but are completely optional. In general, you can combine effects too (e.g. a pop part with a flickering noise modifier behaves properly; the light will only flicker when the part is visible, or the humanoid which both floats and rotates at the same time)
The current lists of effects are;
- Parts that pop into existence when you go near
- Parts that move when you go near
- Parts that grow when you go near (while maintaining y offset)
- Textures that scroll
- Parts/lights that randomly flicker using math.noise
- Gui’s that scroll through their contents
- Parts that float between 2 points
- Parts that rotate
All of this happens on the client, so while there is 0 stress to the server it’s worth noting none of this replicates making it entirely aesthetic/not compatible with gameplay (but my usecase is entirely aesthetic)