Blender game engine modification of material value node during game
I solve my problems by write my own shaders.
1) create a material
2) Create a vertex shader


uniform float variable_name;
void main()
{
    vec4 co = gl_ModelViewMatrix * gl_Vertex;
    gl_Position = gl_ProjectionMatrix * co;
}


3) Create a fragment shader


void main(void)
{
  gl_FragColor = vec4(1.0,0,0,1); // RGBA
}


4) load it

#vertex
with open("__path__.vert") as a:
    vertex_shader_code = a.read()

#fragment    
with open("__path__.frag") as a:
    frag_shader_code = a.read()

import bge
own = bge.logic.getCurrentController().owner
m = obj.meshes[0]
shader = m.materials[0].getShader()
shader.setSource(vertex_shader_code, frag_shader_code, 1)


5) pass variable to GPU over uniform value.

shader.setUniform1f("variable_name", 10)