- Home /
Waypoint/Animation help
Hey,
Maybe someone can help me out. hope i can explain this correctly. I've got a waypoint script attached to my model with 3 waypoints set up. When the model is moving to the waypoints it is playing animation "Walk" and when it reached the waypoint it stays there for a few seconds and plays the animation "Pondering", but what i actually want is that it doesnt play animation "pondering" at every waypoint only at waypoint 3 so basically i want the model to walk through waypoint 1 and 2 and then at waypoint 3 play "pondering". How could i do this? I'm a bit lost at the moment.
Thanks in advance.
This is the script so far:
var waypoint : Transform[];
var speed : float = 0.5;
var currentWaypoint : int;
var loop = true;
var test;
function Update () {
animation.wrapMode = WrapMode.Loop;
if(currentWaypoint < waypoint.length){
var target : Vector3 = waypoint[currentWaypoint].position;
var moveDirection : Vector3 = target - transform.position;
var velocity = rigidbody.velocity;
if(moveDirection.magnitude <= 0.2){
test = true;
print("magniute");
animation.CrossFade("pondering");
speed = 0;
if(test){
WaitThreeSeconds();
currentWaypoint++;
}
}
else{
if(!test){
animation.CrossFade("walk");
speed = Random.Range(0.5,0.5);
RotateTowards();
}
}
}
velocity = moveDirection.normalized * speed;
rigidbody.velocity = velocity;
}
function RotateTowards () {
var target : Vector3 = waypoint[currentWaypoint].position;
var moveDirection : Vector3 = target - transform.position;
while(Vector3.Distance(target, transform.position) >= 1.5){
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(moveDirection), 1.5* Time.deltaTime);
transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);
yield;
}
}
function WaitThreeSeconds(){
yield WaitForSeconds(2.6);
test = false;
}
Answer by jaised · Feb 25, 2012 at 06:50 AM
In your:
if(moveDirection.magnitude <= 0.2){
test = true;
print("magniute");
animation.CrossFade("pondering");
speed = 0;
if(test){
WaitThreeSeconds();
currentWaypoint++;
}
}
Only play the pondering animation and only wait 3 seconds if currentWaypoint == 2 (this will be waypoint 3 as you described just arrays are 0-index based). Otherwise, for the other waypoints, just increment your counter and continue walking. Good luck and hope this helps.
Hey, thank you for your answer. Could you maybe show me how the script should look like, it gives me a better understanding on how it works. Thanks.
Hey again thanks alot this is working but theres 1 small problem its now not rotating towards the waypoints. I got this so far:
if(moveDirection.magnitude <= 0.2){
test = true;
print("magniute");
if(currentWaypoint == 2){
animation.CrossFade("pondering");
WaitThreeSeconds();
speed = 0;
}
currentWaypoint++;
}
else{
if(!test){
animation.CrossFade("walk");
speed = Random.Range(0.5,0.5);
RotateTowards();
}
}
}
velocity = moveDirection.normalized * speed;
rigidbody.velocity = velocity;
}
}
Answer by jaised · Feb 25, 2012 at 06:07 PM
if(moveDirection.magnitude <= 0.2){
test = true;
print("magniute");
// here the player will change animations and wait
// otherwise, it will just increment the counter and continue walking.
if(currentWayPoint == 2) {
animation.CrossFade("pondering");
WaitThreeSeconds();
}
speed = 0;
currentWaypoint++;
}
Your answer
Follow this Question
Related Questions
Animation / Distance 0 Answers
how to get a animation from other script on colision 1 Answer
How to call animation from another Script in C#? 1 Answer
Animation problems 1 Answer
How to click a 3d object in unity3d? 3 Answers