2014-10-01 35 views
1
  1. 速度取決於從物體到點擊的距離。 如何解決這個問題?
  2. 如何鎖定y軸上的移動(點擊後)?統一2d水龍頭走路

    public int speed; 
    Vector3 position; 
    bool go; 
    
    void FixedUpdate() 
    {  
        if (Input.GetKey (KeyCode.Mouse0)) 
        { 
         go=true; 
         Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
         RaycastHit hit; 
    
         if (Physics.Raycast (ray, out hit, Mathf.Infinity)) 
         { 
          position = hit.point; 
         } 
        } 
    
        ////////////////////////////////////////////////////////////////////// 
    
        if(go) 
        { 
         Vector2 direction = position - transform.position; 
    
         float targ_pos = Vector2.Distance (transform.position, position); 
    
         if(targ_pos>0) 
         { 
          rigidbody2D.AddForce ((position - transform.position)*speed);  
         } 
         else {go=false;} 
        } 
    } 
    
+0

您當前正在增加相對於你正試圖「翻譯」的距離的力。您需要創建一個歸一化的矢量,然後按照速度多倍化。 至於第2點,在你的對象剛體可以動態設置移動限制,我認爲這是你在找什麼? – Zze 2014-10-01 21:36:42

+0

感謝您的回覆。 我知道「正常化」,但我真的是一個新手。 ) 類似於: rigidbody2D.AddForce((position - transform.position).Normalize * speed); 導致錯誤。 至於第2點(如果您寫了約束鎖定位置/旋轉),此功能僅適用於RigidBody(3D),不適用於2D。 – 2014-10-02 19:09:00

回答

0

也許你還在尋找一個答案,但可能會幫助別人知道同樣的。

我做了一個遊戲,其中角色以ClickToMove方式移動。這是我做到的。我的遊戲是3D遊戲,所以你可能需要稍微調整一下。

我們存儲了我們點擊的點,它屬於我場景的floor(floorHit)。在我班的頂部,我宣佈了一個Vector3 toGo。我的球員有一個剛體連接到它,我旋轉到它應該移動的點。然後使用MoveTowards(from,to,speed);

if (Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)) { 

       Vector3 playerToMouse = floorHit.point - transform.position; 

       // the quaternion defines the rotation, looking through the vector 
       Quaternion newRotation = Quaternion.LookRotation (playerToMouse); 
       playerRigidbody.MoveRotation (newRotation); 

       toGo = floorHit.point; // We save the point we touched } 

然後外面的如果,仍然在更新功能,我們稱之爲MoveTowards與多哥的Vector3我們先前保存:

transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime); 

希望幫助,

最重要的是,如果你想動畫你的角色,我有代碼。

不要猶豫,要求更多,

BRO