У переменной isGrounded все время меняется значение

Программирование на Юнити.

У переменной isGrounded все время меняется значение

Сообщение AndreyMust19 20 янв 2012, 16:36

Проверяю в наличие контакта с земле (закоментированный вариант тоже не работает):
Синтаксис:
Используется csharp
grounded = controller.isGrounded;
//grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
Debug.Log("grounded = "+grounded);

В консоли видно что переменная grouded постоянно меняет значение.
Перенес код перемещения из Update в FixedUpdate (поменяв Time.deltaTime на Time.fixedDeltaTime). Теперь если персонаж остановится, то значение grounded тоже перестает меняться.

Вот 2 варианта кода перемещения, глючит с обоими:
Синтаксис:
Используется csharp
if (side != 0.000f ||   vert != 0.000f) {
        Vector3 vect = transform.position;
        if (isChar) { // с контроллером
                Vector3 transit;
                if (grounded) {
                        vert = 0.0f;
                        transit = new Vector3(side * Time.deltaTime, 0.0f, 0.0f);
                }
                else {
                        vert -= gravity * Time.deltaTime;
                        transit = new Vector3(side * Time.deltaTime, vert * Time.deltaTime, 0.0f);
                }
                controller.Move(transit);
                vect = transform.position;
        }
        // без контроллера
        else {
                vect.x += side*Time.deltaTime;
                vert = (prev_position-transform.position).y;
                transform.position = vect;
                prev_position = transform.position;
        }
        cam.transform.position = vect + distCam; // передвигаем камеру
}


Синтаксис:
Используется csharp
Vector3 vect = transform.position;
if (isChar) { // с контроллером
        Vector3 transit;
        grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
        if (grounded) {
                vertAccel = 0.0f;
                transit = Vector3.right * side * Time.deltaTime;
        }
        else {
                vertAccel -= gravity * Time.deltaTime;
                transit = Vector3.right * side * Time.deltaTime + Vector3.up * vertAccel * Time.deltaTime;
        }
        controller.Move(transit);
        vect = transform.position;
}
// без контроллера
else {
        vect.x += side*Time.deltaTime;
        vert = (prev_position-transform.position).y;
        transform.position = vect;
        prev_position = transform.position;
}
cam.transform.position = vect + distCam; // передвигаем камеру


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

Re: У переменной isGrounded все время меняется значение

Сообщение AndreyMust19 20 янв 2012, 23:29

Разобрался.

Character Controller нужно все время прижимать к земле, вне зависимости от того, стоит персонаж на ней или нет.
Хотя это странно - если персонаж стоит на земле, зачем ему гравитация? Он и так по вертикали никуда не сдвинется.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19


Вернуться в Скрипты

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

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