Added Observation Scene to show the Replay
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.Cinemachine.Samples
|
||||
{
|
||||
/// <summary>
|
||||
/// Will match a GameObject's position and rotation to a target's position
|
||||
/// and rotation, with damping
|
||||
/// </summary>
|
||||
[ExecuteAlways]
|
||||
public class DampedTracker : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The target to track")]
|
||||
public Transform Target;
|
||||
[Tooltip("How fast the GameObject moves to the target position")]
|
||||
public float PositionDamping = 1;
|
||||
[Tooltip("How fast the rotation aligns with target rotation")]
|
||||
public float RotationDamping = 1;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if (Target != null)
|
||||
transform.SetPositionAndRotation(Target.position, Target.rotation);
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
if (Target != null)
|
||||
{
|
||||
// Match the player's position
|
||||
float t = Damper.Damp(1, PositionDamping, Time.deltaTime);
|
||||
var pos = Vector3.Lerp(transform.position, Target.position, t);
|
||||
|
||||
// Rotate my transform to make my up match the target's up
|
||||
var rot = transform.rotation;
|
||||
t = Damper.Damp(1, RotationDamping, Time.deltaTime);
|
||||
var srcUp = transform.up;
|
||||
var dstUp = Target.up;
|
||||
var axis = Vector3.Cross(srcUp, dstUp);
|
||||
if (axis.sqrMagnitude > 0.001f)
|
||||
{
|
||||
var angle = UnityVectorExtensions.SignedAngle(srcUp, dstUp, axis) * t;
|
||||
rot = Quaternion.AngleAxis(angle, axis) * rot;
|
||||
}
|
||||
transform.SetPositionAndRotation(pos, rot);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user