私は以前に他のシステム (Three.js ではなく 2D) でこのようなことを行ったことがありますが、基本的にやりたいことは、目標角度に十分に近づくまで角度を徐々に増やしていくことです。通常、これは、フロートがインクリメントする回転速度よりも小さいことを意味します (したがって、値を「オーバーシュート」することはありません)。
増分の量は、どれだけ速く回転させたいかによって異なります。
また、角度を 360 度または 0 度に近づけるかどうかに応じて、角度を大きくするか小さくするか (時計回りまたは反時計回り) を確認する必要があります。これは、差が 180 より大きいか小さいかを確認することで確認できます。
モジュラス演算子を使用して、-360/360 の間の「実際の」角度を取得できます。
var currentAngle = car.mesh.rotation.y * 180 / Math.PI; //car's angle in degrees
var targetAngle = 90; //preferred angle *this time* ;)
var turningSpeed = 1; //one degree per update (wayyy to high for real stuff, usually)
currentAngle = currentAngle % 360; //get the 0-360 remainder
if ( Math.abs(targetAngle - currentAngle) >= turningSpeed) {
var addto = 0
if (targetAngle - currentAngle < 0) {
addto = 360
}
if ( targetAngle - currentAngle + addto <= 180 ) {
currentAngle += turningSpeed;
}
else {
currentAngle -= turningSpeed;
}
}
else { currentAngle = targetAngle; } //we're close enough to just set it
car.mesh.rotation.y = ( currentAngle * Math.PI ) / 180; // back to radians!