正如我希望正确理解的动画“设置触发器”将设置动画假一旦它完成(纠正我,如果我错了),但这不是我的项目的情况。
我有两个状态。默认(什么都不做)和Move。当应用程序打开时会自动进入默认状态,当我调用“SetTrigger”时会触发Move。我期望Animator在动画完成后会将此动画ID设置为false,然后返回默认状态。但事实并非如此-动画不断重复。我可以通过调用“ResetTrigger”来实现这一点手动但然后我需要检测动画何时完成,这在我的情况下并不方便。
我想实现动画只播放一次,当调用。有什么想法?
谢谢
编辑:添加动画控制器
public class TestAnimation : MonoBehaviour
{
private Animator _animation;
private static readonly int Playing = Animator.StringToHash("PlayingTrigger");
// Start is called before the first frame update
void Start()
{
_animation = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
_animation.SetTrigger(Playing);
// _animation.ResetTrigger(Playing);
IDebug.Log("Playing animation ");
}
if (Input.GetKeyDown(KeyCode.R))
{
_animation.ResetTrigger(Playing);
IDebug.Log("reseting animation ");
}
}
}
2条答案
按热度按时间wh6knrhe1#
动画师“SetTrigger”将在动画完成后将其设置为假
它所做的唯一一件事是重置触发器本身,一旦它被用于变换,这并不意味着动画状态被重置,一旦动画已经到达终点。
如果你想让你的动画师回到空闲/默认状态后,你的动画完成,然后在控制器中添加一个transition
与
无其他情况。
否则,您可能更愿意查找Bool参数和
Animator.SetBool
但有一个陷阱:Afaik的触发器可以堆叠!
这意味着,如果调用5次
SetTrigger
,则该触发器将用于5次转换,直到它最终重置,不再触发转换!至少在早期的版本中是这样的。。不确定这是否曾经改变过。
因此,我最终使用了一个触发器重置器,它不是直接连接到特定的状态,而是连接到Basic层本身-〉它会为每个进入的状态自动调用:
bihw5rsg2#
正如@derHugo所指出的;触发器本身得到重置,但不是实际的动画。它困扰了我一段时间。修复相当简单,所有你需要做的是使过渡回到以前的状态(从触发器被触发)。