I need to make a procedural jump in a board game in Unity C# (I conditionally have many points where the player has to jump from one to the other with different distances) which is called by the script. I cannot do animation because I need to calculate distance.
I’ve tried to use Vector3.Slerp which is much modified but it does not work like I imagined at all.
(There I’ve made another Vector3 because I need another axis in the jump)
Ideas ran out.
Please tell me how can I fix a problem in the script above or how I can do procedural jump else. Thank you so much.
>Solution :
Your index is always ever only to be 0. And the code you do in LateUpdate is fully redundant – simply assign the new position directly to transform.position.
I think what you are trying to achieve is to move your object smooth through the various positions provided by stand one by one.
So what you need is
- store the current target point
- move smooth towards it
- when reaching the target point
- previous target point becomes new start point
- get next target point
and do this until you reach the very last one.
You could e.g. do this in a Coroutine like
public float moveSpeed;
public void StartMoveThroughWaypoints(IEnumerable<Vector3> waypoints)
{
StartCoroutine(MoveThroughWaypoints(waypoints));
}
private IEnumerator MoveThroughWaypoints(IEnumerable<Vector3> waypoints)
{
foreach(var waypoint in waypoints)
{
while(transform.position != waypoint)
{
transform.position = Vector3.MoveTowards(transform.position, waypoint, moveSpeed * Time.deltaTime);
yield return null;
}
// as the "==" above has only a precision of 1e-5
// ensure to end with a clean position
transform.position = waypoint;
// optional add delay to shortly hold on each waypoint
//yield return new WaitForSeconds(1f);
// or at least for one frame
yield return null;
}
}