- Home /
Implementing a "Fire Mode" in 2D
Making an artillery game and I want there to be a shot mode on keypress.
Have had a working projectile fire but I am having trouble getting it to work with update, I'm not sure where exactly I'm going wrong... can anyone help with this? {
public Transform firepoint;
public GameObject shell;
public GameObject clone;
public Camera playcam;
private float vforce;
private float hforce;
bool h;
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
ShootMode();
}
if (Input.GetButtonDown("CamChange"))
{
CamChange();
}
}
private void CamChange()
{
if (GameObject.Find("MainCam").GetComponent<Camera>().enabled == true)
{
GameObject.Find("MainCam").GetComponent<Camera>().enabled = false;
playcam.enabled = true;
return;
}
if (playcam.isActiveAndEnabled == true)
{
GameObject.Find("MainCam").GetComponent<Camera>().enabled = true;
playcam.enabled = false;
return;
}
}
void ShootMode()
{
GetComponent<playermovement>().enabled = false;
bool h = GetComponent<playermovement>().facingRight;
hforce = 0;
bool exitSM = false;
while (!exitSM)
{
if (Input.GetButtonDown("Fire1"))
{
GetComponent<playermovement>().enabled = true;
exitSM = true;
}
if (Input.GetButtonDown("Jump"))
{
if (hforce > 5)
{
hforce = 5;
}
if (hforce < 0)
{
hforce = 0;
}
fire();
exitSM = true;
}
if (Input.GetButtonDown("Horizontal"))
{
hforce = hforce + Input.GetAxis("Horizontal");
}
}
}
void fire()
{
clone = Instantiate(shell, firepoint.position, firepoint.rotation) as GameObject;
clone.AddComponent<Destructible2D.OnCollision>();
clone.SetActive(true);
if (h == false)
{
clone.GetComponent<Rigidbody2D>().AddForce(new Vector2(hforce * -100, vforce*10));
}
if (h == true)
{
clone.GetComponent<SpriteRenderer>().flipX = true;
clone.GetComponent<Rigidbody2D>().AddForce(new Vector2(hforce *100, vforce*10));
}
GetComponent<playermovement>().enabled = true;
}
}
Answer by Jessespike · Jun 06, 2016 at 08:19 PM
"fire()" is only called when "Fire1" and "Jump" are pressed down at the same time. ShootMode is only called when "Fire1" is pressed, which then checks if "Jump" is pressed. That's probably not what you want.
Instead of nesting the "Jump" check inside of the "Fire1" check, separate the two.
Your answer
Follow this Question
Related Questions
Bounce when hitting wall 2 Answers
Instantiate projectile with velocity vector of direction character is facing 2 Answers
i want to destroy a projectile after it passes a limit on x axis after instantiation(2d game) 1 Answer
How do you make a projectile move in an arc? (2d) 1 Answer
Prediction of Path For a cannon launching a gameobject 1 Answer