Unity — создание родительских 2D-движущихся платформ

Я борюсь с воспитанием персонажей на движущихся платформах в 2D-игре.

Я использую OnTriggerEnter2D() для обнаружения, когда игрок наступает на движущуюся платформу. Он меняет своего родителя на эту платформу. С обычными движущимися платформами (влево-вправо) все работает нормально, если персонаж стоит на этой платформе, то он движется параллельно ей, может ходить, прыгать и т.д. Проблема возникает, когда я использую платформу, которая висит на двух веревках, связанных с HingeJoint2Ds. Игрок должен раскачивать эту платформу, идя влево и вправо. При использовании ввода с клавиатуры все работает нормально, но при использовании контроллера сенсорного ввода, когда игрок не двигается, персонаж остается на одном месте и не двигается с этой платформой. В панели иерархии все правильно, игрок является потомком платформы и платформа движется, а персонаж нет.

Для перемещения персонажа я использую это: (часть контроллера персонажа)

float move = Input.GetAxis ("Horizontal”);
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);

То же самое для клавиатуры и сенсорного ввода. Отличие только в получении переменной move. Решение для движущихся и качающихся платформ такое же. (иерархия, родители, коллайдеры и т.д.)

Я борюсь с этим в течение нескольких часов, но я понятия не имею, что может быть не так.

Спасибо за любую помощь.


person Lukáš Navrátil    schedule 29.12.2014    source источник


Ответы (1)


Что вы называете «контроллером сенсорного ввода», это сенсорное устройство? Если да, то уверены ли вы, что Input.GetAxis("Horizontal”) что-то делает на сенсорных устройствах? не будет ли он всегда возвращать 0?

Пробовали ли вы регистрировать значение move или копировать его в общедоступную переменную, чтобы наблюдать за его изменением в инспекторе? Возможно, значения различаются на несколько порядков между одним контроллером и другим, и в этом случае вам понадобится множитель.

person benblo    schedule 29.12.2014
comment
Контроллер сенсорного ввода является частью моего контроллера персонажа, используемого для мобильных устройств. В этом случае я не использую Input.GetAxis(Horizontal), я просто устанавливаю значение перемещения на 1 или -1, когда игрок нажимает кнопку ходьбы. И это была ошибка. Я установил 0 для движения, когда кнопка ходьбы не была нажата. Вот почему персонаж не двигался, даже когда стоял на движущейся платформе. Я решил это, добавив «platform.rigidbody2D.velocity» к «character.velocity». Теперь он работает нормально. Действительно помогло зарегистрировать значение «перемещения». Спасибо - person Lukáš Navrátil; 30.12.2014