Передвижение объекта Touch.position

81
01 января 2022, 02:40

Введение: 2D проект, в котором есть два Sprite. Первый передвигается в позицию касанию на экран (Touch), Второй же перемещается/отдаляется к Первому. Все перемещения делаются через transform.position.

Суть проблемы: Второй передвигается с заданной скоростью без нареканий, но не Первый.

Во-первых: т.к. это 2D, то я фиксирую Z-ось в FixedUpdate, потому что при таче происходит изменение этой самой оси. (Аналогично происходит и если тач заменить на позицию курсора - улетает по Z...). Как это можно решить, чтобы не фиксировать Z-ось?

Во-вторых: само передвижение:

Touch touch = Input.GetTouch(0);
Vector3 touchpos = cam.ScreenToWorldPoint(newVector3(touch.position.x, touch.position.y, 0f));
touchpos.Normalize();
float moveposX = touchpos.x * speed * Time.fixedDeltaTime;
float moveposY = touchpos.y * speed * Time.fixedDeltaTime;
PlayerObj.transform.position = PlayerObj.transform.position + new Vector3(moveposX, moveposY,0f);

Передвижение слишком медленное. Да, можно добавить скорости (speed), но Второй объект, который следует/отдаляется за Первым имеет такую же скорость и такой код

Vector3 delta = transform.position - Player.position;
delta.Normalize();
if (Vector2.Distance(transform.position, Player.transform.position) < Distance && Catch.CurrentCatch == "Enemy")
{
    Enemy.transform.position += -delta * Speed * Time.fixedDeltaTime;
}
else
{
    Enemy.transform.position += delta * Speed * Time.fixedDeltaTime;
}

Если использовать Input.GetAxis, то управление на клавиатуре оказывается ровно таким, как и у Второго объекта - точно такая же скорость.

Как можно решить проблему привязки Z-оси и скорости передвижения объекта управляемого через позицию тача/мыши?

Answer 1

Попробуйте заменить Vector3 touchpos = на Vector2 touchpos =.

Vector3 delta кстати тоже кривая.

READ ALSO
Перетаскивание формы за любое место (контролы в том числе) + закрытие по клику на любое место

Перетаскивание формы за любое место (контролы в том числе) + закрытие по клику на любое место

Имеется форма без рамок с одним элементом axWindowsMediaPlayerПо сути, что то типа окна плеера

59
Триггер не видит название кнопки которая вложена в popupbox. Как сделать чтобы триггер увидел название кнопки?

Триггер не видит название кнопки которая вложена в popupbox. Как сделать чтобы триггер увидел название кнопки?

Триггер не видит название кнопки которая вложена в popupbox но если кнопку вынести за пределы popupbox то все работаетКак сделать чтобы триггер увидел...

68
Консоль разработчика в онлайн игре

Консоль разработчика в онлайн игре

Есть авторитарный сервер и клиент на юнитиХотелось бы сделать в клиенте терминал (на "~", к примеру), в котором можно вводить чит коды, такие...

169
C# Билдер, Windows Forms

C# Билдер, Windows Forms

Задача такова:

174