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