0
我有一個animatormanager能夠從1動畫創建運行時動畫(開始幀,結束幀和延遲,然後速度計算,將做變形,以後)。我的統一版本是5.3.1f1如何用統一動畫器啓動多個動畫?
一切工作正常,有些東西沒有完成,但是可選的。動畫師可以對請求的動畫進行排隊,以防止當前動畫中斷。
事情是,我只能用一個對象開始1次動畫。啓動下一個動畫的代碼是完全相同的,但沒有任何關係。
事件如果它的2次相同的動畫具有相同的動畫數據 所有的公式都很好並經過測試。
我也有斷點,以確保一切密集調試是在任何時候
罰款有什麼阻止我的其他後開始的動畫2次對象一個上?我沒有任何錯誤或警告。無論我在AnimData結構中放置的設置如何,第一個動畫都能正常工作,但第二次沒有任何事情發生。
這裏是必不可少的:
public int? startAnim(int index)
{
if(index < animIndex.Count)
{
startAnim(animIndex[index]);
}
return null;
}
//private because the struct is internal, this make sure the animator keep control of the list.
private int? startAnim(AnimData animD)
{
if(locked)
{
#if UNITY_EDITOR
Debug.Log("anim locked");
#endif
return null;
}
//current anim (queue anim) not finished
if(endTime > Time.time)
{
if(canQueue)
{
addToQueue(animD);
return animDataQ.Count;
}
else
{
return null;
}
}
else
{
endTime = Time.time + animD.TotalTime;
StartCoroutine(animManager(animD));
return 0;
}
return null;
}
#endregion anim starters
private IEnumerator animManager(AnimData animData)
{
animator.speed = Mathf.Abs(animData.calculateSpeed(animLength, AnimType.main, currentKey).Value);
//animator.Play(0,0, animData.StartKey/animLength);
if(animData.AnimSpeed > 0)
{
animator.Play(0,0, animData.StartKey/animLength/2);
}
else
{
//animator.Play(0,0, (animLength * 2) - (animData.StartKey/animLength));
animator.Play(0,0, (((animLength*2) - animData.StartKey)/(animLength * 2)));
}
//animator.Play(0,0, (animData.AnimSpeed > 0) ? animData.StartKey/animLength : ((animLength * 2) - (animData.StartKey/animLength)));
yield return new WaitForSeconds(animData.Delay);
animator.Stop();
yield return null;
endAnim();
}
private void addToQueue(AnimData animD)
{
animDataQ.Enqueue(animD);
endTime += animD.TotalTime;
queueTime += animD.TotalTime;
}
private void endAnim()
{
if(canQueue && animDataQ.Count > 0)
{
StartCoroutine(animManager(animDataQ.Dequeue()));
}
}
感謝您的時間。