2016-02-29 4 views
1

Я создал простой скрипт для перемещения плеера на вход клавиатуры, хотя теперь я хочу переместить плеер на сенсорный ввод, как мне это сделать?Перемещение игрока при касании 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».

Вы можете создать две кнопки пользовательского интерфейса, соответствующие клавишам «вперед» и «назад». Добавьте компонент триггера события к этим кнопкам. Добавьте два типа событий к кнопкам: «Pointer Down» и «Pointer Up». Добавить функцию в список каждого из этих событий. Поместите этот код на объект в вашей сцене.

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. Лучший способ сделать это - создать две кнопки пользовательского интерфейса с прикрепленным EventTrigger и назначить методы MoveForward и MoveBackwards - PointerDown и StopMoving - PointerDown. Хотя я бы реализовать его по-разному:

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 и вы можете контролировать скорость и ускорение. Вы должны изменить Rigidbody на Rigidbody2D, если вы собираетесь использовать его с 2D физикой.

Смежные вопросы