2014-05-19 26 views
1

我想讓我的玩家在玩家擊中屏幕左側時向左移動。現在,當我按住鼠標按鈕時,我的播放器只會移動。我真正想要的是讓他不斷地向左移動,直到我按下屏幕一次後,他到達目標位置。光滑的lerp剛體

有人可以告訴我什麼,我從我的代碼丟失,讓這種情況發生?

void FixedUpdate() 
{ 

    if(Input.GetMouseButtonDown(0)) 
    { 
     if(Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3) 
     { 
      if(position == middle) 
      { 
       MoveLeft(); 
      } 
     } 
    } 
} 

void MoveLeft() 
{ 
    var pos = rigidbody.position; 
    float xPosition = left.transform.position.x; 
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime); 
    rigidbody.position = pos; 
} 

我的方法是在FixedUpdate因爲我剛體運動的球員反對翻譯的實際播放器。

+0

我看這件事,線性插值=線性插值) –

+0

呀。它意味着在兩點之間平滑地移動一個物體。有一個斯派普相同,但在一個球形運動,如此好的軌道等,但不是我可以在這裏使用:( – N0xus

+0

對於初學者,你應該使用Time.fixedDeltaTime如果你正在從FixedUpdate() – DMaguireKane

回答

0

現在玩家只有在你點擊鼠標按鈕時纔會移動,因爲這就是你的代碼的寫法:你檢查每一幀是否按下鼠標,只有當它移動剛體時。

如果您希望玩家移動而不管鼠標是否仍然按下,您應該創建某種變量來保存播放器的狀態,並且設置爲在按下並設置鼠標按鈕時向左移動當玩家達到目標時停止。

如果我理解正確的話你的目標,這將是這個樣子:

bool moveLeft = false; 

void FixedUpdate() 
{ 

    if(Input.GetMouseButtonDown(0) 
     && (Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3)) 
    { 
     moveLeft = true; 
    } 

    if (moveLeft 
     && (position == middle)) 
    { 
     MoveLeft(); 
    } 
    else 
    { 
     moveLeft = false; 
    } 
} 

void MoveLeft() 
{ 
    var pos = rigidbody.position; 
    float xPosition = left.transform.position.x; 
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime); 
    rigidbody.position = pos; 
} 
+0

感謝那個人的好聲音,我想要的是我的玩家只有在用戶點擊屏幕左側時纔會移動(現在我用鼠標點擊),然後讓它沿着它的快樂方式前進,直到它擊中結束點我實現了你的支票,但是當我點擊時它仍然只會移動一小部分,我甚至修改了我的移動以使用Time.fixedDeltatime以及 – N0xus

+0

那麼,它爲什麼會停止?它應該每次調用MoveLeft()方法而moveLeft爲true,將其設置爲false? –

+0

啊,我現在明白了,謝謝你的幫助。 – N0xus