- Home /
[SOLVED] Top down shooter projectiles can shoot side to side, but not up and down, why?
Looks like a 2D top down game, but it's actually 3d so I can use navmesh pathing (orthographic camera and everything is tilted 90 degrees), WASD for movement, arrows for shooting.
Movement is fine, no problems.
Projectile is a sprite with a sphere trigger collider, non-kinematic rigidbody that instantiates from a muzzle child on the player.
Player is a sprite with trigger box collider and non-kinematic rigidbody.
I can shoot right and left without problem (projectile instantiates and moves as desired), but shooting up the screen and down the screen is not working (the projectile instantiates but does not move at all)
I've tried adjusting the Vector 3, using AddForce instead of velocity, using Time.deltaTime, using layers, and more, but I get the same result: left and right projectiles work fine, up and down does not.
I've been chopping at this for too long and could use an extra set of eyes/ideas on the problem. What am I doing wrong? Why are my up and down projectiles not moving? Any help is appreciated.
[SOLUTION] Declared a variable as a Vector2 but used it as a Vector3...it simply dropped the Z component and never caused an error). Works like a a charm now.
{
public GameObject muzzle1;
public GameObject muzzle2;
public GameObject projectile;
public AudioClip projectileFireSound;
public float projectileSpeed = 10f;
private Vector2 projectileDirection; //SOLVED <----This Vector2 declaration should be a Vector3
private GameObject projectileParent; // holds all the projectile instances in hierarchy
private float fireRate = 15f;
void Update() { Move(); FireControl(); }
void FireControl()
{
if (Input.GetKey(KeyCode.UpArrow))
{
projectileDirection = new Vector3(0, 0, 1);
Fire();
}
if (Input.GetKey(KeyCode.DownArrow))
{
projectileDirection = new Vector3(0, 0, -1);
Fire();
}
if (Input.GetKey(KeyCode.RightArrow))
{
projectileDirection = new Vector3(1, 0, 0);
Fire();
}
if (Input.GetKey(KeyCode.LeftArrow))
{
projectileDirection = new Vector3(-1, 0, 0);
Fire();
}
}
void Fire()
{
GameObject missile = Instantiate(projectile, muzzle1.transform.position, Quaternion.Euler(90, 0, 0)) as GameObject; //create projectile and flip sideways
missile.transform.parent = projectileParent.transform; //put all projectile objects under a parent in hierarchy
AudioSource.PlayClipAtPoint(projectileFireSound, transform.position);
missile.GetComponent<Rigidbody>().velocity = (projectileDirection * projectileSpeed);
}
}
Your answer