Вы можете использовать этот код, чтобы делать то, что вы хотите:
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
var point = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y,
transform.position.z - Camera.main.transform.position.z));
Debug.DrawLine(Camera.main.transform.position, point, Color.green, 1);
var delta = transform.position.x - point.x;
if(Mathf.Abs(delta) < threshold)
{
return;
}
if (point.x < transform.position.x)
{
transform.Translate(-0.05f * speed, 0, 0);
}
else if (point.x >= transform.position.x)
{
transform.Translate(0.05f * speed, 0, 0);
}
}
Input.GetTouch()
даст вам vector2
, Это x
и y
- позиции вашего касания в 2Dэкран вашего телефона / планшета.Поэтому вам следует преобразовать позицию касания экрана в мировую позицию (x
, y
и z
в трехмерном пространстве), а затем сравнить эту мировую позицию с позицией вашего объекта.
Причина, по которой выНеобходимо использовать Основная камера . Это означает, что ваше касание должно быть преобразовано в трехмерное пространство, а для преобразования 2D-точки в 3D-точку требуется параметр Z
.Вы получите этот параметр, найдя разницу положений основной камеры и объекта.Вы можете получить основную камеру, используя Camera.main
.
Я также добавил Debug.DrawLine()
, чтобы показать вам точную точку.Используйте UnityRemote для проверки и просмотра строки в Редакторе .
Существует свойство threshold
, предотвращающее щелчок игрового объекта.
Примечание: Имейте в виду, что это только пример, и он не будет работать для других ракурсов камеры.