Can blender game engine detect if a character is falling and play an animation?
KX_GameObject.worldLinearVelocity

On a Physics object the Z-axis of the coordinates would be negative.

As static objects do to move (via Physics engine) this attribute will remain (0,0,0). This will be the case on physics types Static, Occluder, Sensor, Navigation Mesh, Character. This is a bit strange as this types (except Static) have not really much to do with physics (it is more a purpose type). Changes in location (which is basically a teleportation), can only be tracked by recording the previous position and comparing it to the current one.

Here is an example:

import bge

PROPERTY_LAST_POSITION = "last.position"

gameObject = bge.logic.getCurrentController().owner
currentPosition = gameObject.worldPosition
lastPosition = gameObject.get(PROPERTY_LAST_POSITION, currentPosition)
gameObject[PROPERTY_LAST_POSITION] = currentPosition.copy()
positionDifference = currentPosition - lastPosition

isFalling = (positionDifference.z &lt; 0)

controller = bge.logic.getCurrentController()
for actuator in controller.actuators:
    if isFalling:
        controller.activate(actuator)
    else:
        controller.deactivate(actuator)