2015-11-08 69 views
1

我是Unity中的新成員,正在製作我的第一款2D遊戲。我在這個問題上看到了這個論壇上的幾個主題,但我沒有找到解決方案。Unity2d遊戲拍攝和動畫同步問題

所以我有一個可愛的射擊動畫和子彈代。我的問題是,我必須在動畫中間的某個位置生成子彈,但是角色同時射擊子彈和動畫,這會消耗用戶體驗:)

我附加了一張關於該問題的圖像,現在是子彈初始化的時刻,但正如你所看到的,它已經開始了。

請找我的代碼: 的遊戲管理器更新方法調用attackEnemy功能:

public void Awake(){  
     animator = GetComponent(); 
     animator.SetTrigger ("enemyIdle"); 
    } 



    //if the enemy pass this point, they stop shooting, and just go off the scren 
    private float shootingStopLimit = -6f; 

    public override void attackPlayer(){ 
     //animator.SetTrigger ("enemyIdle"); 
     if (!isAttacking && gameObject.transform.position.y > shootingStopLimit) { 
      isAttacking = true; 
      animator.SetTrigger("enemyShoot"); 
      StartCoroutine(doWait()); 
      gameObject.GetComponentInChildren().fireBullet(); 
      StartCoroutine (Reload()); 
     } 
    } 

    private IEnumerator doWait(){ 
     yield return new WaitForSeconds(5); 
    } 

    private IEnumerator Reload(){ 
     animator.SetTrigger ("enemyIdle"); 

     int reloadTime = Random.Range (4,7); 
     yield return new WaitForSeconds(reloadTime); 

     isAttacking = false; 
    }...... 

我的問題: - 我如何可以同步動畫和子彈一代?

  • 爲什麼不doWait()的作品? :)

  • 可以從GameManager更新調用attackPlayer方法嗎?

  • 當屏幕右側到達屏幕的最右側時,敵人會從屏幕右側飛到屏幕左側,使用戶可以看到敵人。我不知道爲什麼,但是他們先給一個拍攝動畫(沒有子彈發生),只有在他們做了閒置之後。任何想法爲什麼?

感謝, ķ

enter image description here

回答

1

我建議檢查出動畫事件。使用動畫事件,你可以調用一個方法來實例化你的項目符號。

要使用你需要寫你想在選定的幀中的「編輯動畫事件」窗口的「功能」區域調用函數的名稱Mecanim動畫事件。

其他方框用於任何要傳遞給該函數的變量,以觸發您想到的任何內容。

不同動畫之間的觸發/混合可以用許多不同的方法完成。事件區域更適合您要觸發的與動畫無關的其他事物(例如音頻,粒子FX等)。

+0

thx隊友,工作就像地獄! – Karoly