Я пытаюсь создать движение игрока по оси x на основе положения пальца.
Что мне нужно, чтобы произошло: Не мультитач. Я хочу, чтобы игрок мог опустить палец и захватить эту позицию. Затем проверьте, провел ли игрок пальцем по экрану по оси x и переместил ли игрока влево или вправо в зависимости от того, где он перетащил палец от первого прикосновения.
Итак, если они касаются экрана и перетаскивают влево: двигайтесь влево по скорости, а если изменяется, перетаскивая вправо, двигайтесь вправо по скорости.
Любая помощь была бы потрясающей.





используя код @programmer, указанный в этом ответе: Определение направления жеста смахивания
Вы можете легко определить направление, в котором вы проводите / перетаскиваете. Заменить отладку
void OnSwipeLeft()
{
Debug.Log("Swipe Left");
}
void OnSwipeRight()
{
Debug.Log("Swipe Right");
}
С функциями, которые перемещают вашего персонажа. Если вы используете RigidBody для перемещения вашего персонажа, вы можете использовать https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html. Если это обычный объект, вы можете переместить его, настроив transform.position.
Если вам нужна дополнительная информация о том, как перемещать твердые тела \ нормальные объекты, дайте мне знать, какой у вас тип игры, и более подробную информацию о том, как вы настраиваете игрока.
Самый простой способ - сохранить первую позицию касания, а затем сравнить X с этой позицией:
public class PlayerMover : MonoBehaviour
{
/// Movement speed units per second
[SerializeField]
private float speed;
/// X coordinate of the initial press
// The '?' makes the float nullable
private float? pressX;
/// Called once every frame
private void Update()
{
// If pressed with one finger
if (Input.GetMouseButtonDown(0))
pressX = Input.touches[0].position.x;
else if (Input.GetMouseButtonUp(0))
pressX = null;
if (pressX != null)
{
float currentX = Input.touches[0].position.x;
// The finger of initial press is now left of the press position
if (currentX < pressX)
Move(-speed);
// The finger of initial press is now right of the press position
else if (currentX > pressX)
Move(speed);
// else is not required as if you manage (somehow)
// move you finger back to initial X coordinate
// you should just be staying still
}
}
`
/// Moves the player
private void Move(float velocity)
{
transform.position += Vector3.right * velocity * Time.deltaTime;
}
}
ПРЕДУПРЕЖДЕНИЕ: это решение будет работать только для устройств с доступным сенсорным вводом (из-за использования Input.touches).
Не могли бы вы сказать мне, что за? после того, как float называется или ссылка, чтобы лучше понять? На устройстве все работает нормально. Если кто-то еще ищет, вы просто не можете запустить это в редакторе.
Я написал предупреждение внизу ответа, сказав, что это работает только на устройствах с сенсорным вводом. Что касается ссылки на '?', См. docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… («Синтаксис T? Является сокращением для Nullable <T>, где T - тип значения. Эти две формы взаимозаменяемы.»)
пожалуйста, покажите нам свои исследовательские усилия, что вы уже пробовали, и опубликуйте свой текущий соответствующий код