2014-04-01 84 views
2

我有移動GameObjects兩種方式進行線性插值效率:rigidbody.velocity VS在Unity3D

方法1

void Update(){ 
    rigidbody.velocity = (targetPosition - transform.position)*speed; 
} 

方法2

void Update(){ 
    transform.position = Vector3.lerp(transform.position, targetPosition, Time.delta*speed); 
} 

哪一個更有效? rigidbody.velocity使用GPU嗎?

編輯

我開發的移動平臺,所以我想知道,如果性能可能這兩種方法之間有很大的不同。

回答

3

的問題的答案

哪一個更有效?

transform.position

這是因爲使用transform.position直接修改GameObjectTransform組分的,其控制的位置,取向,和所述對象的縮放的位置。

使用rigidbody.velocity使用物理系統修改此變換,該系統可能比僅直接設置值更慢。

但我必須強調,這是一個過早優化的極端情況,兩者在性能方面的差異可以忽略不計。您應該關注的唯一區別是如何使用這些不同的方法將對象移動到您的遊戲設計中。通常,transform.position只能在兩種情況下使用:(1)瞬時運輸(產卵,遠距傳送等)或(2)不使用物理系統的物體(即,不會基於重力移動,摩擦或其他因素)。

另一方面,使用rigidbody.velocity用於提供更加逼真的基於物理系統的運動行爲。

使用哪一個應該基於遊戲設計和當前對象,而不是由「哪一個更有效率?」來決定。

+0

我的主要關注點是,當我開發移動平臺後,很多物體移動時,rigidbody.velocity可能會影響幀速率。 –

+0

我想這隻取決於「多少是多少?」的問題。我再一次主張,現在擔心這是一個過早優化的情況,只有在未來通過使用分析器確定是瓶頸時才應該處理。 – ssell

+0

感謝您的回答。我有很多已經用lerp實現的代碼,但我想開始使用物理動畫來爲用戶提供更豐富的體驗。雖然我只能寫出位置和速度的微分方程(有時候這樣做),但使用團結內部看起來更安全,只是想知道性能成本。 關於移動遊戲對象的數量。我預計一次不會超過10個。 –