AnimationCurveとは?
AnimationCurveは、Unityでアニメーションデータや補間を扱うためのクラスです。
このクラスを使用することで、時間に対する値の変化をグラフ曲線として定義し、その曲線に基づいてアニメーションの挙動を制御することができます。
簡単な使い方
AnimationCurveは、標準機能なのでパッケージなどを追加しなくても使用できます。
以下の様なコンポーネントクラスを作成し、GameObjectにアタッチするとインスペクタ上に表示されます。
using UnityEngine;
public class CurveTest : MonoBehaviour
{
[SerializeField] private AnimationCurve _curve;
}
インスペクタでは、グラフ部分を選択するとCurve編集用ウィンドウが開きます。
ここで、時間が0〜1に変化する間に、値をどのように変化させるのかを設定できます。

コードからグラフを設定するには?
AnimationCurveはコードからも設定を行うことが出来ます。
AnimationCurveの実体にAddKeyでキーフレームの時間と値を設定します。
AnimationCurve curve = new AnimationCurve();
curve.AddKey(0f, 0f);
curve.AddKey(1f, 1f);
この場合は下図のようなグラフになります。

また、AddKeyメソッドには、KeyFrameクラスを渡すことも出来ます。
KeyFrameの場合は、キーフレームの左右の傾きも設定することが出来ます。
AnimationCurve curve = new AnimationCurve();
_curve.AddKey(new Keyframe(0f, 0f, 1f, 0f));
_curve.AddKey(new Keyframe(1f, 1f, 0f,1f));
この場合は下図のようなグラフになります。

値を取得する
AnimationCurveを用意できたので、時間経過に応じて値を取得する方法を見ていきます。
値を取得するには、Evalutateメソッドに時間を渡します。
Updateメソッドを追加して、Textに時間と値を表示してみます。
private void Update()
{
var value = _curve.Evaluate(Time.time);
_text.text = $"Time: {Time.time:F2}\nValue: {value:F2}";
}
時間経過でValueが1.00まで変化するのを確認できました。

アニメーションに使用する
値は取得できたので実際にアニメーションさせてみます。
ローカルのX座標を-100から100までの間を移動させてみます。
var localPosition = transform.localPosition;
localPosition.x = -100f + 200f * value;
transform.localPosition = localPosition;

スプライトを移動させることが出来ました。
時間外の挙動
先ほどの例では、時間が1を過ぎるとになると値が変化しなくなります。
時間が1を過ぎた後、もしくは0より前の場合のどのように扱うかはCurveEditor上で設定できます。

グラフの左右にある歯車をクリックすると以下の3種類から処理を選択できます。
Clamp(初期値)- 時間外では値が変化しなくなります
Loop- 時間を0〜1の間に収めてループさせます
Ping Pong- 時間を逆にして往復するようになります。
動画にすると以下の様になります。

カーブごとの動作の違い
3つのスプライトのAnimationCurveのカーブを変えてみました。
同じ1秒間での移動ですが、緩急が付いているのが分かります。

まとめ
AnimationCurveについて説明しました。
AnimationClipを使うほどでもないちょっとしたアニメーションに使えるかと思います。
AnimationCurveは、時間に対する値の変化を簡単に定義できるため、スムーズなアニメーションを実現するのに非常に便利です。
エディターのインスペクターを使って視覚的に編集できるため、デザイナーやプログラマーが直感的にアニメーションの動きを調整することができます。
また今回は移動のみでしたが、各種アニメーション以外にもスコアの変動、色の変化などにも使用できます。
いろいろなものが連動するアニメーションをさせたい場合はAnimationClipや、
DOTweenのようなアセットの使用も検討してみてください。