Your .blend has some things i would not do it like that.
First your problem:
There is no problem, everything does exactly like you scripted it.
But elevator is not doing anything…
Yes, because you can’t apply force or velocity to an static object. Change it to dynamic, collision bound box (not really needed but for dynamic objects (that fits in a box) it works better), and increase the force to like 150 instead of 1. Now when ball hit, elevator wil go up.
Ok now what i would do differently:
Don’t make a physics elevator but use a simple animation, activate it on collision, at top activate another with the same animation only this time reversed start and end frame.
Scripts, use module/function mode, not bare scripting.
scriptname in editor end with .py, so elevator.py
python brick set to module, scriptname.function to run so elevator.updown
in python a simple function:
def updown():
to fill in basic controller and owner
def updown(cont):
own = cont.owner
scene = own.scene
camera = scene.active_camera
the function already got the controller build in, so we just need to define the controller in the first slot that we send info to/the controller takes info from. Can be any name, if you leave that name empty then it will automatically bind the controller to it.
Now trough this way you eliminate all errors that get caused if you run the script on multiple objects, because normal scripting can only be run from 1 single object while module/function mode can be run from millions of objects at the same time.