[SOLVED] Bullet is not shooting properly

Hi. I’m working on a 3rd person adventure game with attack mechanics. The code I made successfully calls the bullet during a mouse click, but it does not shoot out, staying in the weapon.

This is my current code:

var PlayerMovement = pc.createScript('playerMovement');

PlayerMovement.attributes.add('speed', { type: 'number', default: 0.2 });
PlayerMovement.attributes.add('power', {type: 'number', default: 2500});
PlayerMovement.attributes.add('lookSpeed', {type: 'number', default: 0.25});
PlayerMovement.attributes.add('camera', {type: 'entity',});

// -------- ctobias section ------------------------------------------------------ //
    PlayerMovement.attributes.add('gunEntity', {type: 'entity'});
    PlayerMovement.attributes.add('bulletPower', {type: 'number'});
// ------------------------------------------------------------------------------- //

PlayerMovement.prototype.initialize = function () {
    var app = this.app;
    var camera = app.root.findByName('Camera');
    this.cameraScript = camera.script.cameraMovement;    

    // Listen for mouse move events
    app.mouse.on("mousemove", this._onMouseMove, this);

    // when the mouse is clicked hide the cursor
    app.mouse.on("mousedown", function () {

        // -------- ctobias section ------------------------------------------------------ //
        // ------------------------------------------------------------------------------- //

    }, this);

// Temp variable to avoid garbarge colleciton
PlayerMovement.worldDirection = new pc.Vec3();
PlayerMovement.tempDirection = new pc.Vec3();

PlayerMovement.prototype.update = function (dt) {
    var app = this.app;
    var worldDirection = PlayerMovement.worldDirection;
    worldDirection.set(0, 0, 0);
    var tempDirection = PlayerMovement.tempDirection;
    var forward = this.entity.forward;
    var right = this.entity.right;

    var x = 0;
    var z = 0; 
    if (app.keyboard.isPressed(pc.KEY_A)) {
        x -= 1;

    if (app.keyboard.isPressed(pc.KEY_D)) {
        x += 1;

    if (app.keyboard.isPressed(pc.KEY_W)) {
        z += 1;

    if (app.keyboard.isPressed(pc.KEY_S)) {
        z -= 1;

    if (x !== 0 || z !== 0) {
        var pos = new pc.Vec3(worldDirection.x * dt, 0, worldDirection.z * dt);

        var targetY = this.cameraScript.eulers.x + 180;
        var rot = new pc.Vec3(0, targetY, 0);

        this.entity.rigidbody.teleport(pos, rot);
    this.entity.anim.setFloat('xDirection', x);
    this.entity.anim.setFloat('zDirection', z);

// user-defined function - ctobias section ----------------------------------------//
PlayerMovement.prototype.ctobias = function(dt){
    // step-1 get the center of the screen
    var centerScreenX = this.app.graphicsDevice.width/2;
    var centerScreenY = this.app.graphicsDevice.height/2;

    // step-2 get the start and end point
    var start = this.camera.camera.screenToWorld(centerScreenX, centerScreenY, this.camera.camera.nearClip);
    var end = this.camera.camera.screenToWorld(centerScreenX, centerScreenY, this.camera.camera.farClip);

    // step-3 trigger raycas between two points and return the closet hit result
    var result = this.app.systems.rigidbody.raycastFirst(start, end);

    // step-4 set the bullet asset, identify the gunEntity, apply force and create instance

        // step 4.1 bullet asset
        var bulletAsset = this.app.assets.get(173129146);

        // step 4.2 create the instance of the bullet
        var bulletInstance = bulletAsset.resource.instantiate();

        // step 4.3 add to hierarchy

        // step-4.4 identify the gun and set the force
        var gun = this.gunEntity;

        this.force = new pc.Vec3();

        var pos = gun.getPosition();
        bulletInstance.enabled = true;

Hi @HaoHow!

Can you share the rigidbody settings of the bullet instance?

Make sure it has a dynamic rigidbody.

Hello yes its in dynamic

Alright, I dont see anything wrong.

Are you sure you apply enough force? You can check this by adding methods like below.


Hi! Sorry just got back to working on this game again. I tried increasing the force (bulletpower) by alot and it still shows the same result. For some reason it also isn’t falling to the ground.

I think the entity is missing a collision component. You need to add a collision component and choose the shape that is matching with your model.

OMG thank you its finally shooting out, but for some reason it’s shooting backwards? I tried rotating both the character and the camera but it just messed with the movement direction respective to the camera controls

If it is shooting backwards you can use a negative forward direction or a negative force.

Wow thank you so much you were such a big help. Hope you have a great day!

1 Like