- Home /
Modified SmoothFollow
Hi, all! I am currently writing a camera script that moves at a minimum speed, but Lerps to the target's current speed if the target's speed is greater than that of the minimum speed. This way, the camera will keep up if the player moves quickly, but if the player is slowed or even stops, the camera will continue to move at a minimum pace (Kind of like those mario stages where the camera position is a boundary and keeps the pressure on).
Lucky for you, dear reader, I am only working on one axis- y. This is a falling game, so I want a negative speed for everything.
The problem: When my target falls, my debug goes from showing that it is slower than min speed to faster as it gains speed, just like any good rigid body should. However, once the target comes in contact with an obstacle and stops, then leaves and falls again, the script doesn't seem to recognize that the rigid body is once again going fast. (Also, the presence of this script causes the target to stutter???)
Is it a bug in my code? It is short and I would appreciate any help I can get.
Thanks! - YA using UnityEngine; using System.Collections;
public class CameraCont : MonoBehaviour {
public Transform target;
public float minSpeed;
public float damp;
private float lastPos;
public float newSpeed;
private float goalSpeed;
// Use this for initialization
void Start () {
lastPos = target.position.y;
newSpeed= -minSpeed*Time.deltaTime;
}
// Update is called once per frame
void LateUpdate () {
if( Mathf.Abs(target.rigidbody.velocity.y) <= Mathf.Abs((lastPos-(minSpeed*Time.smoothDeltaTime)))){
//is target moving slower than min speed?
//if so, make target speed the minimum speed
goalSpeed = -minSpeed*Time.smoothDeltaTime;
Debug.Log ( "Slow" );
}
else{
//if not, make the target sped the target's current speed
goalSpeed = (target.rigidbody.velocity.y*Time.smoothDeltaTime)*0.8f;
Debug.Log ("Fast");
}
newSpeed = Mathf.Lerp ( newSpeed, goalSpeed, damp*Time.smoothDeltaTime );
transform.Translate( 0, newSpeed, 0 );
lastPos = target.position.y;
}
}
//Camera has no max speed but does move at a minimum speed in order to keep the pressure on.