#c# #unity3d #transform #trigonometry
#c# #unity3d #преобразование #тригонометрия
Вопрос:
У меня есть две позиции в сцене Unity, и я хочу, чтобы игровой объект sphere перемещался между ними. Это достаточно легко сделать с помощью команды move towards , но я хочу, чтобы мяч ускорялся при выходе из одной, а затем замедлялся при приближении к следующей в контролируемой кривой. Мне нужно, чтобы он перемещался между двумя позициями в поместье, аналогично тому, как катится мяч.
Мне сказали, что я мог бы сделать это с помощью волны греха, однако я не уверен, как это сделать. Есть ли простой способ сделать это?
Комментарии:
1. Если физика для вас тоже не важна, вы можете использовать iTween.
Ответ №1:
Преамбула
Существует несколько способов решить вашу проблему, не только с помощью функции sine.
Пример синусоидальной функции
Вот пример:
public float frequency = 1.0f; // in Hz
public Vector3 positionA;
public Vector3 positionB;
private float elapsedTime = 0.0f;
public void Update()
{
elapsedTime = Time.deltaTime;
float cosineValue = Mathf.Cos(2.0f * Mathf.PI * frequency * elapsedTime);
transform.position = positionA (positionB - positionA) * 0.5f * (1 - cosineValue);
}
Косинус используется здесь вместо синуса просто для удобства.
Ответ №2:
Я столкнулся с почти такой же задачей. Мои объекты были расположены в случайных позициях, линия между двумя из них не была параллельна оси. Итак, я создал общее решение, которое может помочь кому угодно.
Вот демонстрационное видео, исходный код на Github.
Сценарий сам по себе очень прост. Все, что нам нужно сделать, это вычислить два вектора — вектор главного направления и ортогональный вектор. После этого нам нужно подчинить ортогональный вектор синусоидальной функции, а затем выполнить сложение этих двух векторов, чтобы сумма перемещала объект по точной синусоидальной кривой.
void FixedUpdate () {
float t = Time.time - startTime;
rb.velocity = direction * speed orthogonal * amplitude * Mathf.Sin (frequency * t);
}
Вы можете найти более подробную информацию здесь — как настроить сцену, компоненты и т.д.