地図/気まぐれ/ゲームの手触り

等速でなく、加減速で

0 から 1 へ進む値を、まっすぐ等速で動かすと、止まり際も走り出しも一定の速さになる。その進み具合 t に曲線をかけて、両端でゆっくり、真ん中で速く動かす。同じ移動でも止まり際が滑らかになる。

イージングは、進行度 t0〜1)を別の t'0〜1)へ写す関数の一族。easeInOut は両端で導関数(速度)が 0 になり、中央で最大になる曲線で、加速して減速する動きを作る。easeOut は始点だけ速く終点で減速、easeIn は逆。Robert Penner がまとめた式の集まりが広く使われ、CSS の cubic-bezier()ease-in-out も同じ発想。等速(線形)は機械の動き、加減速はばねや筋肉のような物理を持つ動きに近い。

線形は t がそのまま進む。easeInOut(t)t < 0.52t²、後半で 1 - (-2t+2)²/2 の二本の放物線を繋いだ曲線になる。

上の灰色の点は t をそのまま横位置に使う等速で、左から右へ一定の速さで進む。下の黒い点は easeInOut(t) を通していて、両端でためて真ん中で走る。二点とも t1 に達したら左端へ戻る。中央の曲線が easeInOut の形で、両端の傾きが寝て中央で立っているぶん、黒い点が止まり際と走り出しで遅くなる。

easeInOut の式を 1 - (1 - t)³easeOut(最後だけ減速)に差し替えると、走り出しは速く終点で滑り込む別の動きになる。曲線を取り替えるだけで、同じ時間・同じ距離のまま進み方が変わる。