2014-10-29 60 views
0

我嘗試了許多不同的方法,但從未成功做出完美平滑的相機移動。 即使在一個非常簡單的場景中,相機跟隨也不夠好。運動中出現尖峯。峯值不會週期性發生,但會隨機發生。如果我不知道一些遊戲(如Manuganu)團結一致並且有完美的相機跟隨,我會認爲這是不可能的。Unity3D Choppy Camera Motion

我到目前爲止嘗試過的: - 在LateUpdate/FixedUpdate中更改攝像頭位置。 - 完成我的目標插值/外插。 - 移動攝像機取決於Deltatime。 - 增加物理步驟。 - 設置的targetframerate = 60 -Played所有的畫質設置,垂直同步等 - 許多變化和其他的東西......

最好的情況是,隨機打嗝......在移動和編輯發生。 Unity的示例腳本也不能很好地工作。 由於這個打嗝問題,我無法繼續開發sidescroll亞軍遊戲。

問題是:有沒有什麼辦法我沒有提到,互聯網上有沒有例子? 我做了我能做的一切。

transform.position = new Vector3(target.x, target.y, -10); 

這是我如何更新LateUpdate中的攝像頭位置。

PS:沒有FPS掉落問題。

+0

你的問題是?這裏有無數的潛在問題,你應該至少張貼移動相機的代碼。 – LearnCocos2D 2014-10-29 21:50:18

+1

其實沒有無數的潛在問題,因爲我試圖做的事情是荒謬的簡單。正如你所說,我添加了代碼。感謝 – Namely 2014-10-29 22:24:15

+0

目標如何改變其位置你如何計算它? – LearnCocos2D 2014-10-29 23:25:45

回答

0

嘗試使用Lerp函數,而不是直接移動transform.position

它會像transform.position = Vector3.Lerp(startPosition, endPosition, time);

它應該是光滑的用本品。你有更多的信息和例子在Vector3.Lerp Unity3D

+0

我嘗試了很多類型的結果:隨機打嗝。目標和其他所有對象都沒有問題。 – Namely 2014-10-30 08:22:58

1

@卡什貝爾有一半。您正在使用固定的移動值,但不能保證每個幀都會採用相同數量的現實世界時間。您需要確保每秒單位數不變,這意味着您需要使用時間來控制更新速度。

處理此問題的典型方法是使用Time.DeltaTime,它將始終是表示真實世界幀長度的一小部分,以秒爲單位。例如,在文檔:

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    void Update() { 
     float translation = Time.deltaTime * 10; 
     transform.Translate(0, 0, translation); 
    } 
} 

這裏的腳本會移動它的遊戲對象10個單位每秒,不管幀率。如果沒有Time.deltaTime,它可能在一幀中以1/60秒移動10個單位,而在特別慢的幀中在1/15秒內移動10個單位。

+0

我以前試過lerp,沒做任何改動。感謝您的回答,我如何使用此代碼來跟蹤對象? – Namely 2014-10-30 06:43:35

+0

我的目標有一個剛體和速度。嘗試了你的代碼,仍然看到隨機hicups。 – Namely 2014-10-30 08:19:58

+0

您可能需要一個幀速率計數器,以便您可以區分更新代碼中的打嗝和總體遊戲運行中的巨大峯值。偶爾的長時間停頓通常意味着你正在創建大量對象,然後進行垃圾收集暫停。 – theodox 2014-10-30 21:32:46