У меня есть простая трехмерная баскетбольная игра, над которой я работаю, используя Unity (v 2017.3.1f1 64 bit) с многопользовательским режимом с разделенным экраном ... в основном, если вы проведете пальцем по обе стороны экрана, эта сторона будетстреляйте по мячу, и я проверяю, чтобы независимо от того, сколько пальцев вы проведете пальцем, только один шарик будет сбит с каждой стороны, используя идентификаторы пальцев в классе сенсорного ввода Unity ... кажется, все работает нормально, включая одновременную стрельбус обеих сторон, однако он случайным образом перестанет работать на одной стороне, а затем перестанет принимать входные данные для этой стороны ... иногда он возвращается через несколько секунд, иногда он просто не работает для остальной части игры ... Я могукажется, не повторяет это последовательно, но это будет происходить довольно часто ... это также случается чаще, когда я использую несколько пальцев на каждой стороне одновременно, но это происходило с использованием одного пальца на каждой стороне, или иногда, когдатолько смахивание на одну сторону .... Я уверен, что код мог бы быть написан лучше, но мы хотели сохранить его как можно прощеи, по возможности, явно ... я что-то здесь упускаю? ... возможно, это перегрузка массива Touch или что-то в этом роде? .. цель сборки - ПК, и проблема видна как в редакторе Unity, так и в полной сборкена разных сенсорных экранах, включая ИК и емкостные экраны ... заранее благодарю за любую помощь ... вот соответствующий код:
int screenMidPoint
int finId1 = -1;
int finId2 = -1;
void Start()
{
Input.multiTouchEnabled = true;
screenMidPoint = Screen.width / 2;
}
void Update()
{
if (Input.touchCount > 0)
{
foreach (var touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
//For left half screen
if (touch.position.x <= screenMidPoint && finId1 == -1)
{
p1StartPos = touch.position;
p1StartTime = Time.time;
finId1 = touch.fingerId;
}
//For right half screen
else if (touch.position.x > screenMidPoint && finId2 == -1)
{
p2StartPos = touch.position;
p2StartTime = Time.time;
finId2 = touch.fingerId;
}
}
else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
{
if (touch.fingerId == finId1 && Time.time > p1NextFire)
{
p1NextFire = Time.time + fireRate;
p1EndTime = Time.time;
p1EndPos = touch.position;
p1DeltaSwipe = p1EndPos - p1StartPos;
if (p1DeltaSwipe.y > 0)
{
// p1 Shoot code is here
}
finId1 = -1;
}
else if (touch.fingerId == finId2 && Time.time > p2NextFire)
{
p2NextFire = Time.time + fireRate;
p2EndTime = Time.time;
p2EndPos = touch.position;
p2DeltaSwipe = p2EndPos - p2StartPos;
if (p2DeltaSwipe.y > 0)
{
// p2 Shoot code is here
}
finId2 = -1;
}
}
}
}
}