Advertisement Jump to content
Sign in to follow this  

Unity How to get a bullet to shoot in the direction of the gun in unity for mobile

This topic is 591 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts


I am working in unity with c#. I am working on a 2D platformer for mobile. The way I currently have it setup is one joystick that moves the charatcer makes the charatcer arm rotate and make the charatcer shoot the gun when pressed. Which all workd fine. But the problem I am having is the bullets from the gun are not going in the correct direction. Currently the bullets go to the rigtht no matter where I point the gun. I have tried in the raycats to use transform.right and transform.forward. All end up with the same result. the firepoint for the gun is an empty game object and the firepoint in the script is an tranfrom. I tried changing it to an GameObject in the script but I got the same results. If someone could please help it would be grealty appreciated!!!

Here is the shoot function with the raycast.

public void Shoot ()
        Vector3 firePointPosition = new Vector3 (firePoint.position.x, firePoint.position.y, 0f);
        RaycastHit2D hit = Physics2D.Raycast (firePointPosition, firePoint.transform.right, 100, whatToHit, 0f);
        Debug.DrawRay(firePointPosition, firePoint.transform.right * 100);
        if (hit.collider != null)
            Debug.DrawLine(firePointPosition, hit.point,;
            Enemy enemy = hit.collider.GetComponent<Enemy>();
            if (enemy != null)
                //Debug.Log("We hit " + + "and did " + Damage + "damage");
        if (Time.time >= timeToSpawnEffect)
            Vector3 hitPos;
            Vector3 hitNormal;
            if (hit.collider == null)
                hitPos = (firePointPosition) * 30;
                hitNormal = new Vector3(9999, 9999, 9999);
                hitPos = hit.point;
                hitNormal = hit.normal;
            Effect(hitPos, hitNormal);
            timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
And the effect method
 void Effect (Vector3 hitPos, Vector3 hitNormal)
        Transform trail = Instantiate (BulletTrailPrefab, firePoint.position, firePoint.rotation) as Transform;
        LineRenderer Lr = trail.GetComponent<LineRenderer>();
        if (Lr != null)
            Lr.SetPosition(0, firePoint.position);
            Lr.SetPosition(1, hitPos);
        Destroy(trail.gameObject, 0.04f);
        if (hitNormal != new Vector3(9999,9999,9999))
            Transform hitParticle = Instantiate(HitPrefab, hitPos, Quaternion.FromToRotation (Vector3.right, hitNormal))as Transform;
            Destroy(hitParticle.gameObject, 1f);
        Transform clone = Instantiate (MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
        clone.parent = firePoint;
        float size = Random.Range(0.6f, 0.9f);
        clone.localScale = new Vector3 (size, size, size);
        Destroy(clone.gameObject, 0.02f);
        //Shake the Camera
        camShake.Shake(camShakeAmt, camShakeLength);
        //Play shoot sound


Share this post

Link to post
Share on other sites

just use gameObject.Right

​for example

var bul= instantiate(bullet,gunMuzzle.transform.position,any rotation);
bul.getComponent<rigidbody2d>().addForece(gun.right*200,forcemode.impulse);// if its a 2d game

its a psudo code. remember:

x: right



these are variables that return axis direction of every object

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!