It's usually prefered to use GetTriggerUnit() whenever possible.
It's a cleaner call, it's a bit faster, and... well, that's all I got.
Also, I'd recommend having a configuration trigger that allows the user to configure spell constants rather than having those constants inside the actual spell cast trigger.
It's easier for the user to configure the spell that way similarly to how it's easier to manage a C++ application by having a "Constants.h" header file to keep things like DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT, TILE_SIZE, etc...
Also, I'd recommend making the camera effect optional, as most users wouldn't want that.
- Cache the owning player of the triggering unit into an array variable instead of repeating the call over and over again inside the loop.
- When you set the size of a unit, there are 3 values expected. The last 2 can be 0 and you would still get the same results, so do that. Use your wanted scaling value for the first parameter, and use 0 for the other 2.
- Whenever you create a unit, don't keep referencing "(Last created unit)", store it into a variable, and reference that. (Last created unit) is a function call that returns a variable, but it doesn't inline, so calling it multiple times is inefficient.
- You can apply the above to pretty much anything in between parenthesis like (Picked unit).
Finally, the imports are totally unneeded ;/
You could link to them in the description as recommendations, but we like to have small test maps when showcasing spells/systems.
edit
Make the loop interval configurable because if a user changes it, the spell wouldn't function well if he forgets to change the 0.03 inside the loop code. Using a constant would save users from that fate :3