Linear velocity describes the positional change of an object (typically called “motion”) regarding the build-in physics engine.
It has nothing to do with scaling, nor rotation.
It is independent from the frame rate (it is Blender unit per second)
It has nothing to do with actions or playback speed of actions.
Playing actions and using physics motions are exclusive (unless you play an action as force).
When you want to change the speed of an action playback, you either
- use the Python API to play an action with speed parameter or
- you explicitly set the pose to play (e.g. via action actuator in property mode).
According to your description you need this:
- determine the “size” of the character
-> determine the motions and actions to play based on the size
It looks like you want to reuse the same setup/meshes/actions for different sizes.
Indeed this can result in unwanted effects, e.g. the (walk cycle) step size increased, but the physics motion did not. So you need to have either more speed, smaller steps or action with lower playback speed. This way the action and the motion would fit together again.
As action playing and motion belongs together, I would start and configure them with python. The Action actuator only supports a playback speed of 1.0. The Python API might be better in this situation:
def playWalkCycle(controller):
characterArmature = controller.owner
characterSize = ...
playbackSpeed = characterSize * ... # however you want to transform size to playback speed
characterArmature.playAction("dinosaur.small.walking", 1, 50, 0,0,0, KX_ACTION_MODE_LOOP, 0.0, 0, playbackSpeed)
You call this every time you want to let the character walk. [Do not forget to stop the animation when the character stops!]
to setup the motion I suggest to use a different snippet. Here we setup a motion actuator. How you move the character is up to you.
def configureForwardMotion(controller):
characterPhysics = controller.owner
characterSize = ...
motionActuator = controller.actuators["forward motion"]
configuredLinearVelocity = motionActuator.linV
configuredLinearVelocity.x = characterSize * ... # however you want to transform size to forward speed
motionActuator.linV = configuredLinearVelocity
This code adjusts the motion according to the current size. You do this once after each size change.
When you want to let the character move forward you just activate the actuator (via any controller you like).