I would like to script the animated movement of an object between two positions.
So there is the start vector and the end vector.
The start and end positions are important, and the trajectory should look something roughly like in the image below, but it shouldn't be too precise.
Because the end position should be a fixed one, I can't really use rigidbody physics.
I tried using Vector3.Slerp and Vector3.Lerp, but I couldn't manage to get an acceleration at the end of the trajectory curve.
Could you please give me a few hints, as I forgot the math behind these things?
You're on the right track with Vector3.Lerp (but not Slerp - that's more for interpolating directional vectors rather than positions).
What you need is to just add a curve-based value to the object's height in addition to the straight-line interpolation that Lerp gives you. You can get a nice curved value range which goes from 0 to 1 and back to 0, by feeding a range from zero to PI into the Mathf.Sin function.
Here's a small c# example script which demonstrates:
using UnityEngine;
using System.Collections;
public class Trajectory : MonoBehaviour {
Vector3 startPos = new Vector3(0, 0, 0);
Vector3 endPos = new Vector3(0, 0, 10);
float trajectoryHeight = 5;
// Update is called once per frame
void Update () {
// calculate current time within our lerping time range
float cTime = Time.time * 0.2f;
// calculate straight-line lerp position:
Vector3 currentPos = Vector3.Lerp(startPos, endPos, cTime);
// add a value to Y, using Sine to give a curved trajectory in the Y direction
currentPos.y += trajectoryHeight * Mathf.Sin(Mathf.Clamp01(cTime) * Mathf.PI);
// finally assign the computed position to our gameObject:
transform.position = currentPos;
}
}
Thanks a lot for your quick reply.
In my case your code didn't really work. Using Time.time isn't the best idea (it would probably work only when you first hit play in the editor, as it accumulates)
Here's the code I used, which does pretty much what I wanted:
Because I added the distance between the 2 points in the equation (the magnitude), the animation has the same speed regardless of the distance between the 2 points. If you know any good way to optimize the above code, to run even faster, please let me know.