Быстрое изменение скорости C# Unity

200
22 апреля 2018, 20:54

Доброго времени суток, у меня есть код

if (runtoright)
            Rg.AddForce (Vector3.forward * speed * Time.deltaTime, ForceMode.VelocityChange);
        else 
            Rg.AddForce (Vector3.forward * speed * -Time.deltaTime, ForceMode.VelocityChange);

runtoright меняется в зависимости от достижение правого/левого краев, но при смене краев скорость быстро становится маленькой, а мне нужно что бы как бы отбилось с такой же скорость, могу использовать transform.Translate, но мне нужно именно физически двигать объект, как это можно сделать?

Answer 1

Скорость становится маленькой из-за того, что вы добавляете направленную силу. Т.е. сначала объект начнёт замедляться, а только потом разгоняться в противоположную сторону.

Вероятно, вам можно использовать Vector3.MoveTowards. Этот метод представляет из себя интерполяцию вектора. Т.е. он принимает три параметра - начальная позиция, конечная позиция, и нормализованное положение между ними (от 0 до 1. При 0 и ниже вернётся начальная позиция, при 1 и больше конечная).

Т.е. вы гарантировано не уйдёте дальше заданной точки. Могу предложить следующее решение:

public float _duration; //Время за которое вы хотите доходить от одного края до другого.
Vector3 _begin;
Vector3 _end;
float _curentTime;
void Start()
{
    _curentTime = 0;
    transform.position = _begin; // Задаем начальное положение
}
Update()
{
    _curentTime += Time.deltaTime;
    float normalize = _curentTime/duration; //узнаем какая часть времени прошла с момента начала движения в нужную сторону
    var position = Vector3.MoveTowards(_begin, _end, normalize);
    if (position == _end) // Проверяем дошли ли мы до точки. Если да - меняем конечную и начальную местами и сбрасываем время.
    {
        var cash = _end;
        _end = _begin;
        _begin = cash;
        _curentTime  = 0
    }
}
READ ALSO
Ошибка при десериализации

Ошибка при десериализации

Столкнулся с ошибкой при десериализации ответа от apivk

209
подсчет объектов на изображении c#

подсчет объектов на изображении c#

Есть бинарное изображение(Белый фон с черными пятнами)

198
Как можно реализовать на WPF флажок,который меняет цвет с одного на другой при нажатии?

Как можно реализовать на WPF флажок,который меняет цвет с одного на другой при нажатии?

Необходимо реализовать на WPF флажок,который меняет цвет с одного на другой при нажатии,как,например, checkbox? Пример того,что я хочу видеть в результате

186
Оптимизация строчки

Оптимизация строчки

Имеется строчка:

178