私は一人称キャラクターコントローラーを作ろうとしていますが、私のルックローテーションをスムーズにする問題があります。私のLookRotation
スクリプトは私のマウス入力を受け取り、それを使って文字を回転させます。私はQuaternion.Slerp()
を使用して問題があるが、私の見て回転を滑らかにするためにQuaternion.Slerp()
を使用していました。目的の回転が現在の回転から180度より大きくなると、より短いルート(逆の方法)になります。問題はコードの最後の2行です。誰にもこの問題を防ぐ方法がありますか?前もって感謝します!スムーズローテーション - 四元数
#region Variables
// Sensitivity variables
[Range(0.0f, 10.0f)] public float horizontalSensitivity = 2.0f, verticalSensitivity = 2.0f;
// Smoothing Variables
[Range(0.0f, 30.0f)] public float smoothAmount = 5.0f;
// Character rotation variables
private Quaternion characterTargetRotation;
private Quaternion cameraTargetRotation;
public Transform character;
public Transform characterCamera;
#endregion
private void Update()
{
float horizontalRotation = Input.GetAxis("Mouse X") * horizontalSensitivity;
float verticalRotation = Input.GetAxis("Mouse Y") * verticalSensitivity;
characterTargetRotation *= Quaternion.Euler(0.0f, horizontalRotation, 0.0f);
cameraTargetRotation *= Quaternion.Euler(-verticalRotation, 0.0f, 0.0f);
character.localRotation = Quaternion.Lerp(_character.localRotation, characterTargetRotation, smoothAmount * Time.deltaTime);
characterCamera.localRotation = Quaternion.Lerp(_characterCamera.localRotation, cameraTargetRotation, smoothAmount * Time.deltaTime);
}
本当に 'Quaternion.Slerp()'が必要ですか?基本的なローテーションについては、単純で早いフォワード 'Quaternion.Lerp()'メソッドを使うことを考えていました。 'Quaternion.Slerp()'は回転値を球形に補間しますが、それは問題の可能性があります。 'transform.rotation'への参照はありませんが、後でコードで行うことを前提としています。 – MadJlzz
@MadJlzz応答のおかげで、私はおそらくQuaternion.Lerpを使用する必要がありますが、それでもQuaternion.Slerpと同じ問題が発生します。 – jozza710
@MadJlzzまた、 'character.localRotation'と' characterCamera.localRotation'を使ってローテーションを変更します(最後の2行) – jozza710