Calculating Entity velocity

Hi,
This seems like it should be pretty simple but I am having a hard time figuring it out.

I want to calculate the velocity of my character. E.G. the difference between it’s position in the current frame and it’s position in the previous frame.

I am having trouble saving the character “previous position” so I can access it in the current frame

So far I have this

// update code called every frame
Velocity.prototype.update = function(dt) {

var player = this.app.root.findByName(‘player’);

var prevPos = ?????;
var plyrPos = player.getPosition();

var x = prevPos.x - plyrPos.x;
var y = prevPos.y - plyrPos.y;
var z = prevPos.z - plyrPos.z;
var velicity = (x,y,z);

};

Any help would be appreciated!

Thanks!

You where super close, just had to set prevPos after calculating velocity. Its best to store it for re-use like so.

initialize

// initialize code called once per entity
Velocity.prototype.initialize = function() {
    
    // player: entity
    this.player = this.app.root.findByName('player');
    
    // positional data
    this.previousPosition = new pc.Vec3();
    this.velocity = new pc.Vec3();

};

update

// update code called every frame
Velocity.prototype.update = function(dt) {
    
    // calculate velocity
    const position = this.player.getPosition();
    this.velocity.sub2(position, this.previousPosition);
    
    // store position as previous
    this.previousPosition.copy(position);

};
3 Likes

Thanks so much pixelpros!

This works perfectly, and is a big help in understanding how better to set up scripts like this. I am very new to js in general so I appreciate the support.

1 Like