Have you tried to use a higher value for dir? It's not a direction vector, it's the translation. Maybe 0,1,0 just causes no collision. In addition, your loop changes the value of dir once a collision happens. I can't see any part that resets it to it initial value. And if tree are below the ground, then their initial position can't work. As said, you have to start above the ground to make this work. You can't trigger a collision if the tree is alread located below it and moves even lower. I suggest to increase the Config.collideOffset to something like 1000 and move all the trees 300 units up as initial position. Then let dir be 0,600,0 or something and try again.