Mathf.SmoothDampAngle
Declaration
public static float SmoothDampAngle(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime);Параметры
| Параметр | Описание |
|---|---|
| текущий | Текущее положение. |
| Цель | Положение цели. |
| currentVelocity | Текущая скорость. Этот метод модифицирует currentVelocity каждый раз, когда метод вызывается. |
| smoothTime | Примерное время, необходимое для достижения целевой позиции. Чем ниже значение, тем быстрее этот метод достигает цели. Минимальное значение 0.0001. Если указано более низкое значение, то оно автоматически зажимается до этого минимального значения. |
| maxSpeed | Используйте этот дополнительный параметр, чтобы указать максимальную скорость. По умолчанию максимальная скорость установлена на бесконечность. |
| deltaTime | Время, прошедшее с момента последнего вызова этого метода. По умолчанию это значение равняется `Time.deltaTime`. |
Описание
Постепенно изменяет угол, указанный в градусах, к желаемому целевому углу со временем.
Этот метод сглаживает значение с помощью алгоритма, похожего на пружинный датчик, который никогда не превышает целевое значение. Этот алгоритм основан на Game Programming Gems 4, Глава 1.10.
Примечание: Этот метод пытается избежать превышения целевого значения. Когда deltaTime равняется 0.0f, это приводит к NaN для currentVelocity. Если вы вызываете обратно currentVelocity из NaN, этот метод возвращает NaN.
using UnityEngine;
public class Example : MonoBehaviour { //A simple smooth follow camera, // that follows the targets forward direction
Transform target; float smooth = 0.3f; float distance = 5.0f; float yVelocity = 0.0f;
void Update() { // Damp angle from current y-angle towards target y-angle float yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, target.eulerAngles.y, ref yVelocity, smooth); // Position at the target Vector3 position = target.position; // Then offset by distance behind the new angle position += Quaternion.Euler(0, yAngle, 0) * new Vector3(0, 0, -distance); // Apply the position transform.position = position;
// Look at the target transform.LookAt(target); } }