Possessing and Unpossessing different pawn

you are doing the same thing each time.

first you search the level for all actors of a class. There is no guarantee that they return in any specific order.

You unpossess all found actors of that class, which is not necessary.

Then you possess the first found actor.

So, most likely, you are just possessing the same actor again and again.

Instead of using the Get All node, you could have the pawns report themselves to the controller, and then you can select them with precision, and also avoid the costly Get All node.

The idea is to have a single actor report itself rather than search entire level. This is both more efficient and more precise.

You can do that by using an interface, or you could Get Player Controller → cast to your type → set some reference or call a function which adds reference to an array of references.

So if you set it up so that you have an array of references to your various pawns, then you can pick them out either by index, or use some other method to identify them. Like they might all have tags to identify them, or an enum, etc. Or if you just want to iterate through the array and possess them sequentially you could do that.