It’s a for-each object event, yes.
“id” is an object variable, and you probably have used them already as it’s a common object variable, I just called it “id” 
Don’t surrender so easy, it isn’t so hard, you just need something to connect the objects.
Following my example of Units and Lifebars, you just need a property that each Unit shares with a single Lifebar, for example both of them have a variable “id” with the same value, or they are connected through the Link extension, or the Lifebar is the closest one to the Unit.
Then you just need to use this condition that connects them to pick the right Lifebar inside a for-each object Unit event.
Please read it carefully, if you do it you’ll get a clear idea of how it works:
Imagine you’ve two instances of Unit, one with variable “id” = 1 and the other with variable “id” = 2, and two Lifebar instances too, one with variable “id” = 1 and the other with “id” = 2 (you’ve to create the “id” variables manually, as you do with any object variable):
Unit object Variable "id" = 1
Unit object Variable "id" = 2
Lifebar object Variable "id" = 1
Lifebar object Variable "id" = 2
Then inside a for-each Unit loop, GD will run the events for each instance of Unit, if you do it:
For each Unit object:
Conditions: No conditions
Actions: Move Lifebar over Unit
The loop will run two times (because there are two Unit instances), lets assume it runs first for the Unit with “id” = 1.
First iteration, Unit with “id” = 1: What will happen?, the action to move the Lifebar over Unit will move both Lifebar objects over the Unit with “id” = 1, because GD doesn’t know which Lifebar you want to move and move all of them.
Second iteration, Unit with “id” = 2: Now GD will move all the Lifebar objects over the Unit with “id” = 2, for the same reason.
You see?, you end up moving all the Lifebar objects over the last Unit the loop ran at.
To solve it you have to grab GD, shake it a bit, and clearly say to it: I want to move the Lifebar with “id” = 1 over the Unit with “id” = 1, and move the Lifebar with “id” = 2 over the Unit with “id” = 2 !
In other words, move each Lifebar over the Unit with the same “id” value.
So, on each Unit, we have to pick the Lifebar with the same “id” than the current Unit in the loop:
For each Unit object:
Conditions: Variable "id" of Lifebar is = Unit.Variable(id)
Actions: Move Lifebar over Unit
Again, the loop will run two times, but now it works this way:
First iteration, Unit with “id” = 1: The condition will pick the Lifebar instance with “id” = 1, and the action will move this Lifebar over the Unit with “id” = 1. (GD will move all the Lifebar instances with “id” = 1 actually, but you’ve only one)
Second iteration, Unit with “id” = 2: Now GD will move the Lifebar with “id” = 2 over the Unit with “id” = 2.
Note that I could just throw here a working example to show you the way, but I’m fearing people will just copy the events, try to change some values as the object names, and hope for it to work without understanding how it works. But this way is better for the users I guess.
Also it’s useful to have this text to link here and there 