add
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Attach to a game object to make its position always lag behind its parent as the parent moves.
|
||||
/// </summary>
|
||||
|
||||
public class LagPosition : MonoBehaviour
|
||||
{
|
||||
public Vector3 speed = new Vector3(10f, 10f, 10f);
|
||||
public bool ignoreTimeScale = false;
|
||||
|
||||
Transform mTrans;
|
||||
Vector3 mRelative;
|
||||
Vector3 mAbsolute;
|
||||
bool mStarted = false;
|
||||
|
||||
public void OnRepositionEnd ()
|
||||
{
|
||||
Interpolate(1000f);
|
||||
}
|
||||
|
||||
void Interpolate (float delta)
|
||||
{
|
||||
Transform parent = mTrans.parent;
|
||||
|
||||
if (parent != null)
|
||||
{
|
||||
Vector3 target = parent.position + parent.rotation * mRelative;
|
||||
mAbsolute.x = Mathf.Lerp(mAbsolute.x, target.x, Mathf.Clamp01(delta * speed.x));
|
||||
mAbsolute.y = Mathf.Lerp(mAbsolute.y, target.y, Mathf.Clamp01(delta * speed.y));
|
||||
mAbsolute.z = Mathf.Lerp(mAbsolute.z, target.z, Mathf.Clamp01(delta * speed.z));
|
||||
mTrans.position = mAbsolute;
|
||||
}
|
||||
}
|
||||
|
||||
void Awake () { mTrans = transform; }
|
||||
void OnEnable () { if (mStarted) ResetPosition(); }
|
||||
void Start () { mStarted = true; ResetPosition(); }
|
||||
|
||||
public void ResetPosition ()
|
||||
{
|
||||
mAbsolute = mTrans.position;
|
||||
mRelative = mTrans.localPosition;
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
Interpolate(ignoreTimeScale ? RealTime.deltaTime : Time.deltaTime);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user