- Home /
Question by
Lumalisan · Sep 03, 2020 at 07:31 AM ·
inputtouchcountgettouch
How to use Input.GetTouch().phase properly
Hi! I'm making a mobile game in which, when you touch any part of the screen it shoots towards that point. In the game I have a UI with a joystick and another button to place a mine when it is pressed.
The problem is that when the player touches the screen to place the mine, the mine is placed, but it also shoots (and that's what I don't want).
I've been using the Input.GetTouch().phase method until now but it doesn't work for me. Am I doing it wrong or is there another way to check when a player touches a button or another part of the screen?
Mine button calls PutMine()
protected virtual void HandleMines()
{
if (consecutiveMines == 0)
{
nextMineTime = Time.time + cooldownMine;
consecutiveMines++;
}
if ((Time.time > nextMineTime) && putMine)
{
Instantiate(mine, transform.position + Vector3.up * 0.2f, transform.rotation);
consecutiveMines--;
}
}
public void PutMine()
{
putMine = true;
}
And the shoot code is as follows:
protected virtual void HandleShooting()
{
if (consecutiveBullets > 0 && nextShootTime2 < Time.time)
{
consecutiveBullets = 5;
}
if (consecutiveBullets == 0)
{
nextShootTime = Time.time + COOLDOWN_SHOOT;
consecutiveBullets = 5;
}
if (imMoving)
{
if (Input.touchCount >= 2)
{
if (Input.GetTouch(1).phase == TouchPhase.Began && Time.time > nextShootTime && Time.time > nextShootTime3 && UiController.CanShoot() && !putMine)
{
nextShootTime3 = Time.time + 0.3f;
GameObject bulletObj = Instantiate(bullet, fireStart.position, mCanon.rotation);
bulletObj.SendMessage("ImPlayer");
bulletObj.GetComponent<Rigidbody>().velocity = bulletSpeed * mCanon.forward;
consecutiveBullets--;
nextShootTime2 = Time.time + COOLDOWN_SHOOT;
}
else
{
putMine = false;
}
}
}
else
{
if(Input.touchCount >= 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Began && Time.time > nextShootTime && Time.time > nextShootTime3 && UiController.CanShoot() && !putMine)
{
nextShootTime3 = Time.time + 0.3f;
GameObject bulletObj = Instantiate(bullet, fireStart.position, mCanon.rotation);
bulletObj.SendMessage("ImPlayer");
bulletObj.GetComponent<Rigidbody>().velocity = bulletSpeed * mCanon.forward;
consecutiveBullets--;
nextShootTime2 = Time.time + COOLDOWN_SHOOT;
}
else
{
putMine = false;
}
}
}
}
Comment