- Home /
2D top down projectile with joystick problem
Here is the following code for my top-down 2D shooter. The idea is that when the right joystick on the controller is held down in any direction, a projectile is fired in that direction. The code works as it should, but the speed of the projectile will vary depending on how hard the joystick is held in any direction.
void Update () {
if (Mathf.Abs (Input.GetAxis("FireVertical") + Input.GetAxis("FireHorizontal")) > .0){
StartCoroutine (Fire ());
}
}
IEnumerator Fire()
{
if(!shooting)
{
shooting = true;
GameObject projectile = Instantiate(ShootObj, ShootOutOf.position, ShootOutOf.rotation) as GameObject;
//Here is the math for the velocity of the projectile being fired in the direction of the joystick. I am not sure how to fix it so that the direction is kept but speed remains constant.
projectile.rigidbody2D.velocity = new Vector2(Input.GetAxis("FireHorizontal") * speed, Input.GetAxis("FireVertical") * -1f * speed);
Destroy(projectile.gameObject, 1.0f);
yield return new WaitForSeconds (rateOfFire);
shooting = false;
}
}
Thanks in advance
Answer by Wisearn · Oct 20, 2014 at 09:13 AM
Try:
projectile.rigidbody2D.velocity = new Vector2(Input.GetAxis("FireHorizontal"), Input.GetAxis("FireVertical") * -1f).normalized * speed;
When it is .normalized it will always have the magnitude of 1 but in the correct direction.
Your answer
![](https://koobas.hobune.stream/wayback/20220613165502im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Controll 3D Rigidbody Projectile with Joystick 1 Answer
GamePad joystick 0 Answers
How do you properly deal with analog joystick input on multiple controller inputs? 1 Answer
How to avoid sticky corners when moving around using joystick? 1 Answer