2017-04-21 51 views
1

所以我剛寫完我的動作腳本,我的遊戲看起來好像幀率很低。我啓動了fraps,發現我的遊戲運行速度爲60FPS。可能是什麼問題?順便說一句,這也是一款自頂向下的RPG風格的遊戲。 這裏是我運動的腳本是否有幫助:運動似乎波濤洶涌,但FPS很好

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class PlayerMovement : MonoBehaviour { 
Vector2 _playerPosition; 
public GameObject Player; 
// Use this for initialization 
void Start() { 
    _playerPosition = Vector2.zero; 
} 

// Update is called once per frame 
public float speed = 3f; 
void Update() 
{ 
if (Input.GetKey(KeyCode.W)) 
{ 
    transform.position += Vector3.up * speed * Time.deltaTime; 
} 

if (Input.GetKey(KeyCode.S)) 
{ 
    transform.position += Vector3.down * speed * Time.deltaTime; 
} 

if (Input.GetKey(KeyCode.D)) 
{ 
    transform.position += Vector3.right * speed * Time.deltaTime; 
} 
if (Input.GetKey(KeyCode.A)) 
{ 
    transform.position += Vector3.left * speed * Time.deltaTime; 
    } 
} 

}

+1

如果這是在播放器對象檢查器中附加的腳本,那麼您確實不需要GameObject行。 Time.deltaTime是完成上一幀的時間。您想要使用的時間有問題_Time [0]是自程序開始以來的時間,並且每當它增加時允許移動。 0在支架內爲1/20秒,1爲1秒,然後在支架中使用2和3。 – Edward

+0

@愛德華我會如何補充? –

回答

1

觀看YouTube視頻教程,可以在學習統一新事物真正的幫助。看看這裏4 min,你會看到代碼,我會盡力爲您的轉換是這樣的:

if (Input.GetKey(KeyCode.D)){ 
    transform.Translate(speed * Time.deltaTime,0f,0f); //x,y,z 
} 

我在這個問題的意見的建議,我會把你的if語句的方法中的更新外,並調用法說,每一秒,像這樣,它團結有question/answers一個良好的社區以及

InvokeRepeating("MyMethod", 1f, 1f); //I believe this is every second 

我也將做一個建議改變你的代碼,這將減少線路和允許的左,右移動鍵,向上,以及A,D,W,S和我們的操縱桿動作。

void Update(){ 
    transform.Translate(speed * Input.GetAxis("Horizontal") * Time.deltaTime, 0f, 
         speed * Input.GetAxis("Vertical") * Time.deltaTime) 
} 
+0

如果你不介意我問...什麼會smoothDeltaTime幫助? –

+0

不太確定,看起來好像是DC與AC相當。我剛剛閱讀的內容意味着DeltaTime可以幫助您根據FPS進行速度轉換,因此如果您的FPS速度較慢,那麼創建的動作比您的FPS速度更快。 – Edward

+0

@LiamEarle看更新以及更短的代碼建議 – Edward

相關問題