- Home /
How to do “ease in” ?
I want one of the game objects in my game to move between 2 points faster at the beginning and slower at the end. But I want to reach the end point at the minimum speed.
I tried Vector3.SmoothDamp like this
Calculated the time;
timeTakenToMoveToPosition = Vector3.Distance(trans.position, location) / (movingSpeed *5);
and in Update()
Vector3 refVel = Vector3.zero;
trans.position = Vector3.SmoothDamp(trans.position, locationToUnitMoving, ref refVel, timeTakenToMoveToPosition);
The problem I had with this method is the unit move very slow at the end not at the minimum moving speed.
Then I tried following in Update()
movingSpeedTimer += Time.deltaTime*0.5f;
timeBaseMovingSpeed = Mathf.Lerp(movingSpeed * 5, movingSpeed, movingSpeedTimer) ;
trans.position = Vector3.MoveTowards(trans.position, locationToUnitMoving, timeBaseMovingSpeed*Time.deltaTime);
This method unit is moving at movingSpeed at the end. It does not go to 0 as previous method. But the movingSpeed reaches lower value before the unit reaches the end point. So the unit move some distance at the end in movingSpeed.
What I like to have is start with movingSpeed*5 and reach end point with movingSpeed. Can anyone provide some help on this?
Answer by tanoshimi · Jul 07, 2014 at 08:49 PM
You can use AnimationCurves to define custom ease in/out/shake-it-all-about functions. I did this to smooth the movement of a camera as described at http://alastaira.wordpress.com/2013/11/08/smooth-unity-camera-transitions-with-animation-curves/
Your answer
Follow this Question
Related Questions
Moving 2D sprite along a path 0 Answers
Moving an UI element from point A to point B 1 Answer
Creating Projectile - MoveTo/Lerp 0 Answers
SmoothDamp or Lerp with Rootmotion to match a target position 0 Answers
Something like Color.MoveTowards ? 2 Answers