Как можно сделать так, чтобы объект медленно опускался, когда его переносят и удерживают, и не падал быстро, когда его отпускают?

Как я могу улучшить скрипт, чтобы объект не улетал за пределы карты, если его держать долго и затем отпустить? Вот пример моего текущего скрипта, который работает некорректно.
  • 1 мая 2024 г. 9:40
Ответы на вопрос 2
Для того чтобы объект медленно опускался при переноске и удерживании, вы можете использовать физический движок и настроить параметры трения или сопротивления воздуха. Это позволит контролировать скорость опускания объекта при отпускании.

Чтобы предотвратить быстрое падение объекта за пределы карты, можно добавить проверку на расположение объекта и остановить его движение, если он приближается к краю. Например, можно использовать условия и коллайдеры для определения границ карты и остановки движения объекта.

Пример реализации данной логики в скрипте:
```c#
using UnityEngine;

public class ObjectController : MonoBehaviour
{
    private bool isHeld = false;
    private Rigidbody rb;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        if (isHeld) // Держим объект
        {
            // Уменьшаем скорость опускания при отпускании
            rb.drag = 1f;
        }
        else // Отпускаем объект
        {
            // Проверяем расположение объекта и останавливаем его перед границей карты
            Vector3 viewPos = Camera.main.WorldToViewportPoint(transform.position);
            if (viewPos.x < 0.1f || viewPos.x > 0.9f || viewPos.y < 0.1f || viewPos.y > 0.9f)
            {
                rb.velocity = Vector3.zero;
            }

            // Увеличиваем скорость падения объекта
            rb.drag = 0f;
        }
    }

    // Обработка события поднятия объекта
    public void PickUpObject()
    {
        isHeld = true;
    }

    // Обработка события отпускания объекта
    public void DropObject()
    {
        isHeld = false;
    }
}

```
В данном примере скрипта объект медленно опускается при удерживании и быстро падает при отпускании. Также добавлена проверка на расположение объекта, чтобы предотвратить его падение за пределы карты.
По сути у тебе объект не двигается а просто телепортируется, если нужно что бы падало плавно домножь вектор падения на Time. deltaTime, ну и тогда логика скрипта поменяется потому как падения надо вызывать каждый кадр
Похожие вопросы