Я довольно новый программист, и после изучения основ C # я пытаюсь приступить к разработке игр с Unity. Сейчас я пишу небольшую мобильную игру. Я хочу добавить одноэкранный мультиплеер к нему. У меня был простой сценарий, который собирал начальную и конечную позиции свайпа и вычислял путь между двумя точками. затем он сравнил абсолютное значение Δx с абсолютным значением Δy и, наконец, проверяет, находится ли координата ниже или выше 0. Это работает довольно хорошо, но, очевидно, это не сработает для моего запланированного многопользовательского режима с одним экраном. Сначала я попробовал проверить, находится ли начальная точка пролистывания слева или справа от центра экрана. это также работало довольно хорошо, но, очевидно, не могло отследить два удара одновременно. Затем я попытался изменить переменные на массивы и добавить for (позже цикл foreach). теперь всякий раз, когда я провожу в одном направлении, он повторяет сигнал каждый кадр, даже если я очищаю слот в массиве в начале цикла ... после буквально полутора дней пробовать вещи и искать ответы, которые я сейчас нашел добавить мой собственный вопрос. заранее спасибо.
public class HopefullyWorkingSwipeDetector
{
Vector2[] av2_TouchPos1L = new Vector2[5];
Vector2[] av2_TouchPos2L = new Vector2[5];
Vector2[] av2_TouchPathL = new Vector2[5];
public int[] aint_TouchDirectionL = new int[5]; // Up: 0; Down: 1; Right: 2; Left: 3; n/a: 4;
public int int_SwipePendingL;
public int int_CountTouchesL = 0;
public void ListenForSwipeP1()
{
int_CountTouchesL = 0;
int_SwipePendingL = 0;
foreach (Touch touch in Input.touches)
{
if (Input.touchCount > 0 && Input.GetTouch(int_CountTouchesL).phase == TouchPhase.Began && Input.GetTouch(int_CountTouchesL).position.x < Screen.width / 2)
{
int_SwipePendingL = int_CountTouchesL;
av2_TouchPos1L[int_SwipePendingL] = Input.GetTouch(int_SwipePendingL).position;
}
else if (Input.touchCount > 0 && Input.GetTouch(int_SwipePendingL).phase == TouchPhase.Ended && Input.GetTouch(int_SwipePendingL).position.x < Screen.width / 2)
{
av2_TouchPos2L[int_SwipePendingL] = Input.GetTouch(int_SwipePendingL).position;
av2_TouchPathL[int_SwipePendingL] = av2_TouchPos2L[int_SwipePendingL] - av2_TouchPos1L[int_SwipePendingL];
if (Mathf.Abs(av2_TouchPathL[int_SwipePendingL].x) < Mathf.Abs(av2_TouchPathL[int_SwipePendingL].y)) //Vertical
{
if (av2_TouchPathL[int_SwipePendingL].y > 0) //up
{
aint_TouchDirectionL[int_SwipePendingL] = 0;
}
else if (av2_TouchPathL[int_SwipePendingL].y < 0) //Down
{
aint_TouchDirectionL[int_SwipePendingL] = 1;
}
}
else if (Mathf.Abs(av2_TouchPathL[int_SwipePendingL].x) > Mathf.Abs(av2_TouchPathL[int_SwipePendingL].y)) //horizontal
{
if (av2_TouchPathL[int_SwipePendingL].x > 0) //Right
{
aint_TouchDirectionL[int_SwipePendingL] = 2;
}
else if (av2_TouchPathL[int_SwipePendingL].x < 0) //left
{
aint_TouchDirectionL[int_SwipePendingL] = 3;
}
}
}
else
{
aint_TouchDirectionL[int_CountTouchesL] = 4;
}
int_CountTouchesL++;
}
}
}