So, I've tested (successfully) a way to get through this sluggish-ness of the actions for the explosions that I had up before.
First off, I have two Array list proxies on the explosion prefab. One is called "Sphere" and the other is "Explosion." (don't worry, there's a method to this madness.)
Step one, at the start I have the action that starts off the process take two int variables called "C" and "Total" (where C is "count") and sets them to zero (so as to over-ride any previous data in them that might have been held over from the last time that prefab was used.)
then a "Get position" and a "Sphere check" that uses the location just found and the radius of the sphere is a value that's passed into it from the system that spawned it (since I wanted to give the grenades the option of upgrading the blast radius.) Then I stash that data into the "Sphere" array.
Next action after that one is finished I tell it to get the count of all the objects in the "Sphere" array then when that's finished it goes into the next one which I called "Filter." Oh, and the total number of objects is stored in the "total" int variable.
Now the filter has two transitions... a "Continue" and "Finished." it has at the very top an "int compare" which checks to see if the current count is at or above the total var. if it is, it triggers a "Next" global variable (that's the second phase of this system.) Then it gets with "Array list get" the object at index "c" and stores that in a gameobject variable. Then I compare the tag. if it's either Enemy or Player (because grenades I consider "friendly fire" and all that.) and if it is iether, it transitions to the "Continue." If it is not, it just goes to "Finished"
in the "Continue" transition, I take that game object and add it to the "Explosion" array. Then I add one to the "c" variable and finished brings it back to the "Filter" node. In the "Finished" transition (the one where it's neither player or enemy) it just adds one to the "c" variable and goes back to "filter."
as it goes through this, it will then take all the game objects that are from the "Sphere" array and only bring the enemy or player objects to the "Explosion" array.
Since it iterates through all of that pretty quickly it reaches it's finished point and then will trigger the "Next" global transition (you could just use a regular transition but for me the global transition makes the layout a little more neat and tidy.)
First step in the "Next" node is to reset the "c" var back to 0 with a "Set int." Then it goes through a loop where it will take each object in the "Explosion" array and do the appropriate damage allocation system. Since it doesn't have to cycle through hundreds of objects that won't need to be damaged, this has resulted in it being much faster than before. before it'd take a couple seconds to damage all the enemies if there were a ton of objects in the radius, now it is much faster. Still a little slow but I suspect that's because at this point all those gibbets are spawned and aren't in a pooling system (so there is a noticeable lag... but I hope to change that.)
That said, I haven't given this a test with the NGUI Damage text system I have but that's the next step... and if that's too fast and it trips up I'll have to address that but that's another thread.
Sorry for the wall of text, I hope this helps.