How do you keep multiple referenced GameObjects?

So I’m working on this Bullet hell SHMUP game.
I have a mini-boss type enemy(UFO) that has an elaborate bullet set up, but the ai script on the parent references its children by name to shoot. …Which means that if I have more than one UFO in a scene, only one ufo does everything it needs to, and the other one just sits there.
I believe that is because the ai references scripts by GameObject names.
Is there a way I can get a object reference using a child-type command?
AKA is there a script that allows me to do this kind of stuff?

The Ai is on the parent with 2 children. 1 of the 2 children has 5 more children.
The command would allow the parent script to access the child with grandchildren.
then, it would go furthur into the grandchildren and get access to the scripts on them.

I would appreciate all help!
An Early Thanks!

You can provide public variables and assign the child objects (or scripts) via drag&drop (for example on the prefab). Every UFO will reference its own children or the scripts respectively.

You can also use Transform.Find, but this does only search the children, not the grandchildren. It may not be that good for bigger hierarchies.
If you need to find scripts which may be attached to children, you can use GetComponentInChildren() or the plural version.