2015-03-28 4 views
-2

Я пытаюсь создать скрипт для управления персонажем. Я хочу, чтобы персонаж двигался на некотором расстоянии вправо, чередуя в себе стрелки ВЛЕВО, а затем ВПРАВО. Поэтому в идеале, когда я запускаю игру, я нажимаю RIGHT ARROW - персонаж движется вправо, указывая 10px, затем нажимайте LEFT ARROW - персонаж движется вправо, и этот паттерн продолжает чередоваться и никогда не позволяет двум одинаковым входам после каждого другого, например: LEFT ARROW LEFT СТРЕЛКА ИЛИ СТРЕЛКА ВПРАВО.Unity C# Script Перемещение символа 2D

ответ

0

Одним быстрым решением (возможно, не лучшим) было бы объявить 2 булеана, разрешить логические права, левые и установить их в false. В случаях, после того, как нажата клавиша, позволяет сказать, что для правой клавиши:

{ 
    right=true; 
    if(left==true) 
     //move character 
    left=false; 
} 

и для левой клавиши будет

{ 
    left=true; 
    if(right==true) 
     //move character 
    right=false; 
} 

таким образом, персонаж не будет двигаться, если право и левые стрелки чередуются.

1

в конечном итоге будет за это, но спасибо за помощь: D

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour { 

    public float moveSpeed; 
    public float jumpHeight; 
    private KeyCode lastHitKey; 

    void Start() 
    { 
    } 

    void Update() 
    { 
     if(Input.GetKeyDown (KeyCode.Space)) 
     { 
      GetComponent<Rigidbody2D>().velocity = new Vector2(0, jumpHeight); 
     } 


     if(Input.GetKeyDown (KeyCode.D)) 
     { 
      if(lastHitKey == KeyCode.D) 
      { 

      }else 
      { 
       GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, 0); 
       lastHitKey = KeyCode.D; 
      } 
     } 


     if(Input.GetKeyDown (KeyCode.A)) 
     { 
      if(lastHitKey == KeyCode.A) 
      { 

      }else 
      { 
       GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, 0); 
       lastHitKey = KeyCode.A; 
      } 
     } 
    } 
} 
0

Вместо того чтобы использовать "KeyCode.A" в, если заявление можно было бы написать:

if(GetComponent<RigidBody2D>().velocity.x < maxSpeed){ 
    GetComponent<RigidBody2D>().AddForce(new Vector2(Input.GetAxis("Horizontal") * Time.deltaTime * speedMult, 0)); 
}