Jump to content
  • Advertisement
Sign in to follow this  
Cuber01

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

This topic is 409 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

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!