【发布时间】:2017-06-29 00:12:39
【问题描述】:
Unity C# 问题。
我有一个带有动画控制器的模型。在通过 SetActive(false) 禁用模型之前,我需要让它“跳转”到动画的第一帧。因此,如果我在动画期间禁用模型,然后再次启用它,模型应该重置其动画并显示为“默认”状态,因此我可以从头开始动画。
问题是,如果我在动画期间禁用和启用模型,它会在我禁用它时显示在同一帧中。
我尝试添加从“任何状态”到默认状态的转换,将转换持续时间设置为 0,并添加“reatart”布尔参数来触发转换。然后:
myObject.SetBool("restart", true);
myObject.SetActive(false);
但它不起作用,对象再次出现在动画中间冻结。
我认为它可能还需要一些时间来过渡,所以我尝试使用协程作为解决方法:
- 仅禁用网格渲染器
- 在 Animator 中开始过渡到动画的第一帧
(过渡持续时间为 0)
- 稍等
- 设置活动(假)
但是当我再次启用它时,它仍然在动画中间冻结。
为什么会这样?以及如何解决?
非常感谢您!
下面是代码示例:
public void disableObject(){
StartCoroutine(disableObjectCoroutine());
}
public void enableObject(){
myObject.GetComponent<Renderer>().enabled = true;
myObject.SetActive(true);
}
IEnumerator disableObjectCoroutine(){
myObject.GetComponent<Renderer>().enabled = false;
myObject.GetComponent<Animator> ().SetBool ("restart", true);
yield return new WaitForSeconds(.1f);
myObject.GetComponent<Animator> ().SetBool ("mainAnimation", false);
myObject.SetActive(false);
}
【问题讨论】:
-
"- 等一下" 为什么要等一下?只需将 Animator 开始过渡设置为动画的第一帧,然后快速将其设置为非活动状态。请用您的代码更新您的问题。
-
@Programmer 添加了!感谢您的回复!
-
检查答案 nipercop left。如果这不起作用,则删除 WaitForSeconds 内容,然后将
myObject.GetComponent<Renderer>().enabled = false;移动到myObject.SetActive(false);之前和myObject.GetComponent<Animator> ().SetBool ("mainAnimation", false);之后。
标签: c# animation unity3d unity5 coroutine