# How do I add more waypoints to a moving platform script.

 0 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); } `````` more ▼ asked Sep 08 '10 at 10:42 PM Rafael 3 ● 5 ● 5 ● 7 SisterKy 2.4k ● 33 ● 41 ● 59 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 Sep 08 '10 at 11:44 PM Peter G add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users

 0 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)); } `````` more ▼ answered Sep 10 '10 at 10:14 PM skovacs1 10k ● 11 ● 25 ● 91 add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users

By Email: