2012-10-21 16 views
1

我正在用Unity3D設計迷宮。迷宮有許多分叉,玩家將在每個分叉之前停下來,並簡單地選擇左側或右側。然後一個自動動畫會將玩家移動到下一個分支直到迷宮結束(或直到死亡結束)。使用AniMate和Unity3D的動畫不會與物理對象相互作用

要在我的Unity項目中使用AniMate和C#來製作動畫。使用AniMate我只是爲每個分支創建一個點對點動畫(例如,下面的法師:從開始/紅色箭頭到第5點)maze and animation with AniMate in Unity

我的問題是,我的動畫腳本(關聯到「第一人員控制器「)不能正常工作,因爲物理不受尊重(玩家穿過牆壁)。如果在同一個項目中,我能夠在統一標準的角色控制,那麼我可以在迷宮導航與牆壁等的物理contrains ...(即我對撞機)。

這是我使用當我按下左到從起點通過代碼,波谷點1至點2的例子:

當我按下左箭頭按鈕是
 void FixedUpdate() { 
if (Input.GetKey(KeyCode.LeftArrow)) { 
//To point 1 
    Hashtable props = new Hashtable(); 
    props.Add("position", new Vector3(756f,112f,1124f)); 
    props.Add("physics", true); 
    Ani.Mate.To(transform, 2, props); 

//To point 2    
    Hashtable props2 = new Hashtable(); 
    props2.Add("position", new Vector3(731f,112f,1124f)); 
    props2.Add("physics", true); 
    Ani.Mate.To(transform, 2, props2); 
} 
} 

什麼實際發生玩家使用穿過牆壁的直線直接移動到第2點。我試圖傳遞給AniMate「Physics = true」,但它似乎沒有幫助。

有關如何解決此問題的任何想法?

或者......有關如何獲得更優化代碼的任何提示,只需使用一系列vector3座標(每個點爲一個座標)即可獲得我想要的簡單動畫,而無需聲明新的Hashtable();等等...每一次? 我選擇了動畫,只是因爲1.我與團結2.初學者我不需要複雜的動畫(如我不需要使用的ITween),沿直線只是固定的動畫,我需要的東西很簡單,快捷以腳本實現。但是,如果有人有一個同樣簡單的解決方案,它將受到歡迎。

預先感謝您的幫助

回答

1

使用像動畫補間引擎,你總是直接動畫的對象的位置,忽略可能發生的任何物理碰撞。如果你想要一個物體正確碰撞或者與關節一起工作,你必須使用力量來移動它,而不能直接改變它的位置。

您可以吐溫影響物理對象,但補間對象不會受到其他物理對象。你也應該製作你正在補間運動的剛體。

在動畫物理學選項並不意味着對象是通過物理受到其他物體,它只是改變了如何應用補間(以FixedUpdate而不是更新),以確保補間對象會影響其他物理對象正常。

在您的例子,兩個補間在同一時間開始,第二吐溫覆蓋的第一個(這就是爲什麼物體直接進入第二個點)。在開始第二個之前,您必須等待第一個補間完成。

做到這一點的最簡單的方法是使用協程:

void FixedUpdate() { 
    if (Input.GetKey(KeyCode.LeftArrow)) { 
     StartCoroutine(TweenCoroutine()); 
    } 
} 

IEnumerator TweenCoroutine() { 
    // To point 1 
    Hashtable props = new Hashtable(); 
    props.Add("position", new Vector3(756f,112f,1124f)); 
    props.Add("physics", true); 
    // Start first tween and wait for it to finish 
    yield return Ani.Mate.To(transform, 2, props); 

    // To point 2 
    Hashtable props2 = new Hashtable(); 
    props2.Add("position", new Vector3(731f,112f,1124f)); 
    props2.Add("physics", true); 
    // Start second tween and wait for it to finish 
    yield return Ani.Mate.To(transform, 2, props2); 

    // etc... 
} 

動畫不支持運動路徑。 HOTween確實可以讓你傳遞補間對象經過的點的列表。

還有一個AniMate(現在是Animate)的new version可用,它有一個流暢的界面,在C#中使用更好。

+0

這正是我需要的,謝謝你的親切幫助:) – Albz