Hey Guys, I'm a new Unity Developer, and I'd like to know how to turn on/off a condition for the animator in a script. For instance, I restrict the transition from idle to run only when the "run" condition is true. However, since I have little experience with Unity, I don't know how to make a transition true from within a script. Can you guys help me? Violin Robot
Define your run condition as a Boolean parameter, for example named "CanRun". Add a condition to the transition that requires CanRun==true. Use Animator.SetBool() to set it true or false: Code (csharp): GetComponent<Animator>().SetBool("CanRun", true); Better yet, go through Unity's excellent tutorials on animation. They'll serve you very well in this case and many others. http://unity3d.com/learn/tutorials/modules/beginner/animation
I am also new to the animator. I am wondering what Speed is in terms of transitions. For instance, using two states, idle and move, for the transitions, idle is true if speed is less than 0.1, move is true if speed is greater than 0.1. However, when my agent is not moving, the move animation is playing??
Is the Speed parameter > 0.1? If you click on a GameObject that has an Animator component, you can see its runtime state in the Animator window. The active state will have a blue progress bar, and the Parameters section in the lower left will contain the current values of the parameters (and you can even change them). Perhaps Speed is still > 0.1. If this is the case, make sure you call Animator.SetFloat("Speed", 0) when your agent stops. If you're using NavMeshAgent, it doesn't talk directly to Animator. It's up to you to mediate between them.
Ok, if I set the Parameters, Speed, for any state (as if I change it, it is universal), if I put the value at 0.1, the idle animation runs at start. However, if I move, then no change occurs. But you are saying that this value must be changed by me, via code>
Ok, sorry for that last post, So yes. I just got it working. Awesome, thank you. However one issue has arisen. How can I be notified when I tell the player to move to position xyz, but player is blocked, from moving there? I had one issue where this occurred, and as such, player kept animating walk, since he had not reached his destination. Thanks!
You can minimize occurrences by tweaking your NavMeshAgent and/or NavMesh settings. Those settings can make a big difference. When you find a case where the player gets stuck, tweak the settings until you can go through without getting stuck. Beyond that, I believe you're on your own. Since you're using Mecanim, you're probably using root motion, so you've told the NavMeshAgent to not control movement. In a script's Update() method or coroutine, keep track of how far the player has moved in, say, the last 2.0 seconds. If the player hasn't moved farther than some minimum distance, change plans. You could give up and switch to an in-place idle state. Or you could try backtracking -- set the destination temporarily to a point 5 units in the opposite direction. This can sometimes get you unstuck, but you run the risk of pacing back and forth between the sticking-point and 5 units behind it. You could always try backtracking just once, then giving up and going to the idle state.