A ver si entiendo, quieres que una serie de objetos se mantenga (en Z) sobre una superficie animada?
Si es así prueba ejecutando el siguiente código.
Código:
for i=1 to $selection.Count-1 do
(
local CA = attributes followSurface
(
parameters followParams
(
zPos type:#float
)
)
custAttributes.add $selection[i] CA
local myController = $selection[i].position.z_position.controller = float_script()
myController.addNode "myObject" $selection[i]
myController.addNode "myTerrain" $selection[selection.count]
myController.script = "dependsOn myTerrain \n" +\
"local dwRayToTerrain = ray myObject.position [0,0,-1] \n" +\
"local upRayToTerrain = ray myObject.position [0,0,1] \n" +\
"case of \n" +\
"( \n" +\
" (intersectRay myTerrain upRayToTerrain != undefined): local Zposition = intersectRay myTerrain upRayToTerrain \n" +\
" (intersectRay myTerrain dwRayToTerrain != undefined): local Zposition = intersectRay myTerrain dwRayToTerrain \n" +\
") \n" +\
"if Zposition != undefined then myObject.followSurface.zPos = ZPosition.position.z \n" +\
"myObject.followSurface.zPos"
)
La forma de usarlo sería primero seleccionar todos los objetos que quieres mantener en la superficie y finalmente el terreno, luego ejecuta el script y si todo sale bien debería funcionar. Es importante que el terreno tenga polígonos mirando hacia arriba y hacia abajo por lo que para que funcione correctamente habría que asegurarse de tener un modificador shell en el terreno.
Espero que te sirva.
Salu2
Marcadores