Движение персонажа с физикой. Персонаж проходит через объект

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

Движение персонажа с физикой. Персонаж проходит через объект

Сообщение mananasaly 13 апр 2019, 23:38

На игровом персонаже висит коллайдер и rigidbody. Пытаюсь двигать его с помощью velocity - персонаж не проходит через объекты, но игра начинает жутко лагать.

Синтаксис:
Используется csharp
public Rigidbody rb;

    float speedMove = 4.5f;
    float starthight;

    private void Start()
    {
        rb = gameObject.GetComponent<Rigidbody>();
        starthight = rb.velocity.y;
    }

    void Update()
    {
        if (Input.GetButtonDown("right") && rb.velocity.y == starthight)
        {
              rb.velocity = new Vector3(1, starthight+0.5f, 0) * speedMove;
        }
        else if (Input.GetButtonDown("left") && rb.velocity.y == starthight)
        {
             rb.velocity =new Vector3(-1, starthight + 0.5f, 0) * speedMove;
        }
 


Тогда я попыталась двигать с помощью MovePosition - игра не лагает, но теперь персонаж игнорирует все коллайдеры и проходит сквозь объекты и не прыгает вверх (но это можно поправить анимацией)

Синтаксис:
Используется csharp
rb.MovePosition(new Vector3(rb.position.x + 1, 1, rb.position.z));
 


Подскажите, если ли какое-то решение данной проблемы? Или только навешиванием "костыльного" скрипта на все объекты внешнего мира?
mananasaly
UNец
 
Сообщения: 10
Зарегистрирован: 30 мар 2019, 23:51

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение Xtir 13 апр 2019, 23:50

Что значит "игра начинает жутко лагать"?
Синтаксис:
Используется csharp
rb.velocity.y == starthight

может попробуете без этой проверки?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение mananasaly 13 апр 2019, 23:59

Xtir писал(а):Что значит "игра начинает жутко лагать"?
Синтаксис:
Используется csharp
rb.velocity.y == starthight

может попробуете без этой проверки?


Жутко лагать - это значит нажимаю на кнопка, а отклик происходит не сразу, прям далеко не сразу.
Попробовала заменить Update() на FixedUpdate() и установила шаг времени 0,001, но мне кажется, так издеваться на устройствами нельзя.

Проверка нужна для того, чтобы персонаж не летел - если очень быстро нажимать на кнопки, то позиция "у" постоянно увеличивается, и персонаж начинает взлетать просто напросто.
mananasaly
UNец
 
Сообщения: 10
Зарегистрирован: 30 мар 2019, 23:51

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение waruiyume 14 апр 2019, 00:05

Чтоб не летал, надо лучом(сферой) под ноги тыкать.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение mananasaly 14 апр 2019, 00:10

waruiyume писал(а):Чтоб не летал, надо лучом(сферой) под ноги тыкать.


можно подробнее, пожалуйста? :-\
mananasaly
UNец
 
Сообщения: 10
Зарегистрирован: 30 мар 2019, 23:51

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение 1max1 14 апр 2019, 00:14

Жутко лагать - это значит нажимаю на кнопка, а отклик происходит не сразу, прям далеко не сразу.

Отклик чего? Движения? Давай код сюда. Под лагами обычно понимают просед в фпс, если дело не в этом, значит проблема в коде.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение waruiyume 14 апр 2019, 00:22

https://docs.unity3d.com/ScriptReferenc ... eCast.html
https://docs.unity3d.com/ScriptReferenc ... phere.html
По нажатию на кнопку, пускаем сферу или CheckSphere так чтобы та была чуть уже коллайдера игрока и слегка выступала внизу, если под ногами ничего нет, но не прыгаем.
Обратите внимание на параметр layerMask.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Движение персонажа с физикой. Персонаж проходит через объект

Сообщение AngryCat 26 апр 2019, 21:35

Скорее всего проблемы в этих условиях: rb.velocity.y == starthight. Так как велосити может менятся, да и float имеет свои погрешности. Вобщем там сложно добиться равенства.
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099


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

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

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