2016-02-29 179 views
1

我創建了一個簡單的腳本來移動播放器的鍵盤輸入,但現在我想移動播放器上的觸摸輸入,我該怎麼做?Move player on Unity C#

這是我的代碼,那麼如何編輯此代碼以使其工作?我有跳躍的工作,但不知道如何做移動?

using UnityEngine; 
using System.Collections; 

public class MoveGround : MonoBehaviour 
{ 
    public float y = 0f; 
    public Rigidbody2D rb; 
    //public float x = 0f; 
    //public float z = 0f; 

    // Use this for initialization 
    void Start() 
    { 
     rb = GetComponent<Rigidbody2D>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     //move function 

     if (Input.GetKey(KeyCode.W)) 
     { 
      rb.velocity = new Vector2(0, y); 
     } 

     if (!Input.GetKey(KeyCode.W)) 
     { 
      rb.velocity = new Vector2(0, 0); 
     } 

     if (Input.GetKey(KeyCode.S)) 
     { 
      rb.velocity = new Vector2(0, -y); 
     } 
     //move function end 
    } 

    public void Move() 
    { 
    } 
} 
+0

你知道如何去做嗎? – Kleber

回答

0

如何使用觸摸輸入而不是鍵盤輸入來移動角色?您當前的代碼根據是否按下「W」或「S」鍵來移動字符。

您可以製作兩個對應於「向前」和「向後」鍵的UI按鈕。 向這些按鈕添加一個事件觸發器組件。向按鈕添加兩種事件類型:「指針下降」和「指針向上」。 將函數添加到每個事件的列表中。 將此代碼放到場景中的對象上。

bool movingForward; 
bool movingBackward; 
public float speed = 0f;// set this either here in code or in the editor 
public Rigidbody2D rb; 

void Start(){ 

    rb = GetComponent<Rigidbody2D>(); 

    movingForward = false; 
    movingBackward = false; 

} 


// Your forward button will call this function 
public void moveForward(){ 

    movingForward = true; 
    movingBackward = false; 

} 



// Your backwardbutton will call this function 
public void moveBackward(){ 

    movingForward = false; 
    movingBackward = true; 

} 

// 


public void stopMoving(){ 

    movingForward = false; 
    movingBackward = false; 

}  

void Update() { 

    if(movingForward || movingBackward){// we're moving 

      if(movingForward){// forward 

       rb.velocity = new Vector2(0, speed); 


     }else if(movingBackward){// backward 

      rb.velocity = new Vector2(0, -speed); 

     } 

    }else{// we're moving neither forward nor backward 

     rb.velocity = new Vector2(0, 0);// so stand still 

    } 

} 

將每個函數指向該對象。在Pointer Down事件中,爲要向前移動角色的按鈕選擇「moveForward」功能,爲另一個按鈕選擇「moveBackward」功能。 在兩者的Pointer Up事件中,只需選擇「stopMoving」功能即可。

這真的很簡單,但它會工作。

0

我同意@PolakięGames。最好的方法是創建兩個UI按鈕,並附上EventTrigger,並將方法MoveForwardMoveBackwards分配到PointerDownStopMovingPointerDown。雖然我會不同的方式實現它:

using UnityEngine; 

[RequireComponent(typeof(Rigidbody))] 
public class MoveExample : MonoBehaviour { 
    public float Acceleration = 4f; 
    public float Speed = 4f; 

    private Vector2 _velocity = Vector2.zero; 
    private Rigidbody _rigidbody; 

    private void Start() { 
     _rigidbody = GetComponent<Rigidbody>(); 
    } 

    // movement methods 
    public void Move(float velocity) { _velocity.x = velocity * Speed; } 
    public void MoveForward() { Move(1f); } 
    public void MoveBackwards() { Move(-1f); } 
    public void StopMoving() { Move(0f); } 

    private void Update() { 
     _rigidbody.velocity = Vector2.Lerp(_rigidbody.velocity, _velocity, Time.deltaTime * Acceleration); 
    } 
} 

這樣,你的對象將smootly移動,並可以控制速度和加速度。如果您打算將其與2D Physics一起使用,則必須將Rigidbody更改爲Rigidbody2D