- Home /
How do I add more waypoints to a moving platform script.
This is what im using for the script, but i would like to add more waypoints to one moving platform.
var targetA : GameObject; var targetB : GameObject; var targetC : GameObject;
var speed : float = 0.1;
function FixedUpdate () { var weight = Mathf.Cos(Time.time speed 2 Mathf.PI) 0.5 + 0.5; transform.position = targetA.transform.position weight + targetB.transform.position (1-weight); }
Unfortunately, interpolation like that only works between 2 points, so you have to find a different method. I might recommend looking at the way point script in the FPS tutorial with modifications to remove the rotating, and this on the wiki. http://www.unifycommunity.com/wiki/index.php?title=Interpolate
Answer by skovacs1 · Sep 10, 2010 at 10:14 PM
Your position assignment can be made easier to read by using Vector3.Lerp since it does the same thing as your weight multiplication:
transform.position = Vector3.Lerp(targetB, TargetA, weight);
//for your consine stuff, flip source and destination since cos starts at 1
For going between multiple waypoints, you just need to consider what when your waypoints change and set up a nice transition between them. Something like:
var waypoints : GameObject[]; //waypoints go in the array //(you could use transforms in stead of GameObjects) var speed : float = 0.1; //Waypoints per second?
private var index = 0; //Which waypoints we're between private var previous : GameObject; //previous waypoint private var next : GameObject; //next waypoint private var adjustment : float = 0; //waypointsPassed / speed private var weight : float = 0; //weight
function FixedUpdate () { if(waypoints.length < 2) return; //Don't bother when there's nowhere to go
previous = waypoints[index]; //Where we last were
if(index != waypoints.length - 1) next = waypoints[index+1]; //Where we're going
else next = waypoints[0]; //go back to the start
//that cosine stuff is kind of nonsense so I recommend just using smoothstep
//but if you must, you could swap source and destination or do angle addition etc.
weight = (time - adjustment) * 0.1;
if(weight > 1) { //We've just passed a waypoint
weight -= 1; //cut back the weight
adjustment += 1 / speed; //adjust the time
if(index < waypoints.length - 1) index++; //we're at the next point
else index = 0; //we're back to the start
}
transform.position = Vector3.Lerp(previous, next, Mathf.SmoothStep(0, 1, weight));
}