I checked from dev tools, in source tab, my vec3 movement calculating normally, but cannot to move, what i’m doing wrong?
Editor Link PlayCanvas | HTML5 Game Engine
Script on Player Entity
Tutorial i followed by First Person Movement | Learn PlayCanvas
My script
var PlayerController = pc.createScript('playerController');
PlayerController.attributes.add('power', { type: "number", default: 1 });
PlayerController.attributes.add('playerCamera', { type: "entity" });
// initialize code called once per entity
PlayerController.prototype.initialize = function () {
// Check for required components
if (!this.entity.collision) {
console.error("First Person Movement script needs to have a 'collision' component");
}
if (!this.entity.rigidbody || this.entity.rigidbody.type !== pc.BODYTYPE_DYNAMIC) {
console.error("First Person Movement script needs to have a DYNAMIC 'rigidbody' component");
}
};
PlayerController.prototype.moveForwardHandler = function (data) {
data.vector.x += data.cameraDirections.forwardDirection.x;
data.vector.z += data.cameraDirections.forwardDirection.z;
return data;
};
PlayerController.prototype.moveBackwardHandler = function (data) {
data.vector.x -= data.cameraDirections.forwardDirection.x;
data.vector.z -= data.cameraDirections.forwardDirection.z;
return data;
};
PlayerController.prototype.moveLeftHandler = function (data) {
data.vector.x -= data.cameraDirections.rightDirection.x;
data.vector.z -= data.cameraDirections.rightDirection.z;
return data;
};
PlayerController.prototype.moveRightHandler = function (data) {
data.vector.x += data.cameraDirections.rightDirection.x;
data.vector.z += data.cameraDirections.rightDirection.z;
return data;
};
var PlayerControlsMaps = [
{
keys: [pc.KEY_W, pc.KEY_UP],
handler: "moveForwardHandler",
},
{
keys: [pc.KEY_S, pc.KEY_DOWN],
handler: "moveBackwardHandler",
},
{
keys: [pc.KEY_A, pc.KEY_LEFT],
handler: "moveLeftHandler",
},
{
keys: [pc.KEY_D, pc.KEY_RIGHT],
handler: "moveRightHandler",
}
];
// update code called every frame
PlayerController.prototype.update = function (dt) {
// Get camera directions to determine movement directions
var forward = this.playerCamera.forward;
var right = this.playerCamera.right;
var movementVec3 = new pc.Vec3(0, 0, 0);
for (const playerControlMap of PlayerControlsMaps) {
for (const playerControlKey of playerControlMap.keys) {
if (this.app.keyboard.isPressed(playerControlKey)) {
proccesMovement = this[playerControlMap.handler]({
vector: movementVec3,
cameraDirections: {
forwardDirection: forward,
rightDirection: right
}
});
movementVec3 = proccesMovement.vector;
}
}
}
if (movementVec3.x !== 0 || movementVec3.z !== 0) {
const movement = movementVec3.normalize().scale(dt * this.power);
this.entity.rigidbody.applyForce(movement);
// rotate the model
const newAngle = 90 - (Math.atan2(movementVec3.z, movementVec3.x) * pc.math.RAD_TO_DEG);
this.entity.setEulerAngles(0, newAngle, 0);
}
};