For loop multiplying the action by the lenght of the array.. WHY ?!

So i have a script that puts in an array every GameObjects that enter the trigger, remove them when they exit it and aplly a force to all of them when they stay in the trigger.
Here is the script :

import System.Collections.Generic;

static public var inUpObjects: List.<GameObject>;

function Start () {
	inUpObjects = new List.<GameObject>();
}

function Update () {

}

function OnTriggerEnter(other:Collider) {
	inUpObjects.Add(other.gameObject);
}

function OnTriggerStay() {
	for (var inUpObject:GameObject in inUpObjects) {
		inUpObject.rigidbody.AddForce(Vector3.down * Atmocube.gravity);
	}
}

function OnTriggerExit(other:Collider) {
	inUpObjects.Remove(other.gameObject);
}

Okay it’s working fine but when a second GameObject enter the array the force is multiplied, when a third GameObject enter the array the force is again multiplied, etc…

Any ideas WHY ?!

OnTriggerStay() gets called gets called once per frame for every collider that is touching the trigger.

2 objects in the trigger, you get 2x the force and so on if you are also itterating over the collection.

In effect, you are duplicating what the OnTrigger system is doing for you.

What if you get rid or your OnTriggerEnter and OnTriggerExit then do something similar to:

function OnTriggerStay( Collider inUpObject ) {
	inUpObject.rigidbody.AddForce(Vector3.down * Atmocube.gravity);
}