не всегда засчитываются клики в кликере
Я делаю кликер в котором есть область клика и объекты находящиеся в этой зоне клика. скрипт написан так, чтобы при клике в области давались очки, но только если клик был совершён не по объекту. И так же чтобы очки не давались когда игрок просто двигает камеру. Так вот, у меня проблема с тем, что после некоторых действий (клик двумя пальцами, приближение и отдаление камеры двумя пальцами и движение камеры пальцем) несколько кликов не засчитывается. Так же не засчитываются одновременные клики. Неделю уже сижу над скриптом, не знаю как это исправить.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Click : MonoBehaviour
{
private Stats.TypeValue typeValue;
public outNumInfo addNum;
private Vector2 touch;
public Canvas spawnCanvas;
private outNumInfo addNumOnj;
private bool isBorderZoneClick = false;
private bool touchNoMove = true;
public void ChangeVal(int index)
{
isBorderZoneClick = true;
typeValue = (Stats.TypeValue)index;
}
private void LateUpdate()
{
if (Input.touchCount > 0)
{
Touch tch = Input.GetTouch(0);
if (tch.phase == TouchPhase.Ended && touchNoMove && isBorderZoneClick)
{
switch (typeValue)
{
case Stats.TypeValue.starDust:
Stats.StarDust.add(Stats.SDForClick.get() * Stats.Multiplier.multiplier);
break;
case Stats.TypeValue.food:
Stats.Food.add(Stats.FoodForClick.get() * Stats.Multiplier.multiplier);
break;
case Stats.TypeValue.money:
Stats.Money.add(Stats.MoneyForClick.get() * Stats.Multiplier.multiplier);
break;
}
touch = Camera.main.ScreenToWorldPoint(tch.position);
if ((typeValue == Stats.TypeValue.starDust && Stats.SDForClick.get() != 0)
|| (typeValue == Stats.TypeValue.food && Stats.FoodForClick.get() != 0)
|| (typeValue == Stats.TypeValue.money && Stats.MoneyForClick.get() != 0))
{
addNumOnj = Instantiate(addNum, spawnCanvas.transform);
addNumOnj.transform.position = new Vector3(touch.x, touch.y, 0);
isBorderZoneClick = false;
addNumOnj.GetComponent<outNumInfo>().typeValue = typeValue;
}
}
if (tch.phase == TouchPhase.Moved)
{
touchNoMove = false;
}
if (tch.phase == TouchPhase.Stationary)
{
touchNoMove = true;
}
}
}
private void Update()
{
if (Input.GetMouseButton(0))
{
isBorderZoneClick = false;
}
}
}