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