2D: Запрыгнуть на движущиеся платформы

Общие вопросы о Unity3D

2D: Запрыгнуть на движущиеся платформы

Сообщение Opts 14 сен 2012, 09:31

Как правильно реализовать движение по движущимся платформам. Пока у меня не получается даже запрыгнуть на неё. Если вниз ещё персонаж кое как спускается вместе с платформой, то вверх подниматься категорически отказывается, проваливается сквозь её.
Пробовал использовать Vector3.MoveTowards, но тогда он намертво прилипает к платформе и ни как не реагирует на передвижение, слегка подёргиваясь. Пробовал отключать гравитацию во время столкновения с платформой, но тоже беда. Перс замирает на том месте как столкнулся с ней. Понимаю, что нужно персонаж двигать вместе с платформой, отключая гравитацию, но пока не понимаю как это правильно сделать.
Была мысль, компонент player сделать child-ом этой платформы, но тогда ошибки в скрипте player, что не может найти компонент CharacterController т.е. нужно тогда CharacterController брать не из parent-а(как сейчас, простой вызов GetComponent<>(), а сначала находить в child листе Плеера и только потом уже из него вытягивать CharacterController. Но что-то мне подсказывает, что это неверный путь и поэтому не стал его развивать.

Хотел бы услышать как другие справлялись с этой задачей.
Opts
UNIт
 
Сообщения: 64
Зарегистрирован: 12 сен 2012, 15:22

Re: 2D: Запрыгнуть на движущиеся платформы

Сообщение AndreyMust19 14 сен 2012, 11:19

Это известная проблема CC-компонента, он просто не рассчитан на такие вещи, т. к. не является физическим объектом.
Как я думаю - надо отслеживать движение платформы под ногами CC и в ту же сторону двигать сам CC. Но пока у меня такое не получается, ибо платформа движется в Update, а CC надо двигать в FixedUpdate. Пока я делаю так - просто удочеряю персонажа к платформе, на к-ю он приземлился.
Если вам критично движение по платформам, то лучше используйте Rigidbody. В этом случае для движения не применяйте силу, а модифицируйте velocity.

Если вы управляете ящиками и др. физическими объектами (а не персонажем), то используйте Rigidbody.
Последний раз редактировалось AndreyMust19 14 сен 2012, 11:35, всего редактировалось 1 раз.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: 2D: Запрыгнуть на движущиеся платформы

Сообщение Opts 14 сен 2012, 11:31

Так rigidbody у меня приатачен к персонажу, я там выключил гравитацию, сам её добавляю. А можно посмотреть Вашу реализацию, как работает с удочерением. И кстати ошибок никаких не было в скрипте, после удочерения?
Opts
UNIт
 
Сообщения: 64
Зарегистрирован: 12 сен 2012, 15:22

Re: 2D: Запрыгнуть на движущиеся платформы

Сообщение AndreyMust19 14 сен 2012, 11:59

Я уже удалил эту штуку из скрипта.
Но по памяти кажется так (если используется CC, разумеется):

Синтаксис:
Используется csharp
        GameObject last_obj = null;
        bool last_ground = false;
       
        void OnControllerColliderHit(ControllerColliderHit hit)
        {
                if (controller.isGrounded ^ last_ground) {
                        last_ground = controller.isGrounded;
                        if (last_ground && hit.gameObject != last_obj) {
                                last_obj = hit.gameObject;
                                transform.parent = last_obj.transform;
                                Debug.Log("Attach to ground");
                        }
                        if (!last_ground) {
                                last_obj = null;
                                transform.parent = null;
                                Debug.Log("Detach from ground");
                        }
                }
        }


Проверил у себя на лифте - работает.
Но у меня почему-то при переходе в зону меняются размеры персонажа (наверное из-за наследования Scale от платформы, на к-ю он приземлился.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10