親オブジェクトが急激に回転した場合に、滑らかにその回転を追従するようなスクリプトを作ります。
実装
SmoothRotator.cs
using UnityEngine;
public class SmoothRotator : MonoBehaviour
{
public bool SmoothRotate = true;
public float SmoothTime = 0.1f;
[SerializeField] private Transform rotateTarget;
// Read-only
[SerializeField] private float prevAngle;
// Read-only
[SerializeField] private float smoothVel;
private void Update()
{
if (SmoothRotate && rotateTarget.parent is { } parent)
{
var currentAngles = rotateTarget.eulerAngles;
currentAngles.z = prevAngle;
// 親の角度
var targetAngle = parent.eulerAngles.z;
currentAngles.z = Mathf.SmoothDampAngle(currentAngles.z, targetAngle, ref smoothVel, SmoothTime);
rotateTarget.rotation = Quaternion.Euler(currentAngles);
prevAngle = currentAngles.z;
}
else
{
prevAngle = rotateTarget.eulerAngles.z;
smoothVel = 0f;
}
}
}
使い方
滑らかに回転させたいGameObjectにアタッチします。
こんな感じで親オブジェクトの回転に滑らかに追従するようになります。