• Advertisement
Sign in to follow this  

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

Recommended Posts

Hello

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, Color.red);
            Enemy enemy = hit.collider.GetComponent<Enemy>();
            if (enemy != null)
            {
                enemy.DamageEnemy(Damage);
                //Debug.Log("We hit " + hit.collider.name + "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);
            }
            else
            {
                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
        audioManger.PlaySound(weaponShootSound);
    }

 

Share this post


Link to post
Share on other sites
Advertisement

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

y:up

z:forward

these are variables that return axis direction of every object

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Advertisement