我正在尝试使用名为Turnaround的动画来改变我的角色。我的周转动画与它应该是相反的方向,因为我在转动动画之前或期间调用了Flip()(在动画中翻转了图像)。 Turn()设置一个触发器,它将调用Turnaround动画来运行。它现在看起来几乎完美,但有一个flickr因为Flip()不会在turnAround动画之后直接发生而且永远不会发生。我需要在Turn()之后直接Flip(),但它永远不会直接及时发生,所以这种技术不能作为专业解决方案。有没有人有任何其他想法怎么做?
void Flip()
{
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
void Turn()
{
facingRight = !facingRight;
anim.SetTrigger("JustTurned");
}
IEnumerator wait()
{
maxSpeed = 0;
Turn();
//float length = anim.animation["TurnAround"].clip.length;
yield return new WaitForSeconds(1.1f);
Flip();
maxSpeed = 5;
}
我已经创建了一个镜像的新精灵表,所以我现在有2个动画(一个用于左边,一个用于右边),现在我不需要翻转世界。我发现,无论我采取什么方法,翻转世界都会导致一个框架与它应该是相反的方向。删除翻盖似乎是最好的解决方案,看起来不错。请评论你的意见。
答案 0 :(得分:1)
如果您的动画是Unity动画,您可以在调用该函数的事件行中设置一个事件:
https://docs.unity3d.com/Documentation/Components/animeditor-AnimationEvents.html
在您的情况下,将事件调用放在动画的末尾。确保您的gameObject具有一个包含您要调用的函数的脚本(假设您可以从该事件调用的函数只是附加到该gameObject的所有脚本的函数)。
答案 1 :(得分:1)
我编辑了我的答案,因为感谢Unity 5,你可以准确知道动画何时结束: 在执行动画的状态中,您可以添加如下行为:
using UnityEngine;
using System.Collections;
public class uy : StateMachineBehaviour {
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}
// OnStateMove is called right after Animator.OnAnimatorMove(). Code that processes and affects root motion should be implemented here
override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}
// OnStateIK is called right after Animator.OnAnimatorIK(). Code that sets up animation IK (inverse kinematics) should be implemented here.
override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}
}
正如您所看到的,这种行为使我们能够了解一些事情,例如进入或离开州时。
答案 2 :(得分:0)
更改您的
yield return new WaitForSeconds(1.1f)
到
yield return new WaitForSeconds(animation.clip.length)