启用它后如何使模型跳转到第一个动画帧?

时间:2017-06-29 00:12:39

标签: c# animation unity3d unity5 coroutine

Unity C#问题。

我有一个带动画控制器的模型。我需要做到这一点"跳跃"在我通过SetActive(false)禁用模型之前的动画的第一帧。因此,如果我在动画期间禁用模型,然后再次启用它,模型应重置其动画并显示在"默认"状态,所以我可以从头开始动画。

问题在于,如果我在动画期间禁用并启用模型,它会在我禁用它的同一帧中冻结。

我尝试添加来自"任何州的转换"到默认状态,将转换持续时间设置为0,并添加" reatart" bool parametr触发转换。然后:

myObject.SetBool("restart", true);
myObject.SetActive(false);

但它不起作用,对象在动画中间再次显示为冻结。

我想也许还需要一些时间来进行转换,所以我尝试使用coroutine作为解决方法:
  - 仅禁用网格渲染器
  - 在Animator中开始过渡到第一帧动画 (过渡期为0)
- 稍等一下   - SetActive(false)

但是当我再次启用它时,它仍然在动画中间被冻结 为什么会这样?它怎么能修好呢? 非常感谢你提前!

这是代码示例:

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);
}

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的想法:

int layer = 0;
int hashName = myAnimator.GetCurrentAnimatorStateInfo(0).shortNameHash; //get current animation name
myAnimator.Play(hashName, layer, 0); // 0 means first frame
myObject.SetActive(false);