Страница 1 из 1

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

СообщениеДобавлено: 13 апр 2019, 23:38
mananasaly
На игровом персонаже висит коллайдер и 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));
 


Подскажите, если ли какое-то решение данной проблемы? Или только навешиванием "костыльного" скрипта на все объекты внешнего мира?

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

СообщениеДобавлено: 13 апр 2019, 23:50
Xtir
Что значит "игра начинает жутко лагать"?
Синтаксис:
Используется csharp
rb.velocity.y == starthight

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

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

СообщениеДобавлено: 13 апр 2019, 23:59
mananasaly
Xtir писал(а):Что значит "игра начинает жутко лагать"?
Синтаксис:
Используется csharp
rb.velocity.y == starthight

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


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

Проверка нужна для того, чтобы персонаж не летел - если очень быстро нажимать на кнопки, то позиция "у" постоянно увеличивается, и персонаж начинает взлетать просто напросто.

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

СообщениеДобавлено: 14 апр 2019, 00:05
waruiyume
Чтоб не летал, надо лучом(сферой) под ноги тыкать.

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

СообщениеДобавлено: 14 апр 2019, 00:10
mananasaly
waruiyume писал(а):Чтоб не летал, надо лучом(сферой) под ноги тыкать.


можно подробнее, пожалуйста? :-\

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

СообщениеДобавлено: 14 апр 2019, 00:14
1max1
Жутко лагать - это значит нажимаю на кнопка, а отклик происходит не сразу, прям далеко не сразу.

Отклик чего? Движения? Давай код сюда. Под лагами обычно понимают просед в фпс, если дело не в этом, значит проблема в коде.

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

СообщениеДобавлено: 14 апр 2019, 00:22
waruiyume
https://docs.unity3d.com/ScriptReferenc ... eCast.html
https://docs.unity3d.com/ScriptReferenc ... phere.html
По нажатию на кнопку, пускаем сферу или CheckSphere так чтобы та была чуть уже коллайдера игрока и слегка выступала внизу, если под ногами ничего нет, но не прыгаем.
Обратите внимание на параметр layerMask.

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

СообщениеДобавлено: 26 апр 2019, 21:35
AngryCat
Скорее всего проблемы в этих условиях: rb.velocity.y == starthight. Так как велосити может менятся, да и float имеет свои погрешности. Вобщем там сложно добиться равенства.