У меня проблема с моим кодом.У меня есть спрайт, и когда я нажимаю на него, я поворачиваю другой объект.Этот объект я могу переместить влево, вправо с помощью клавиатуры.Проблема в том, что если вы продолжаете нажимать LeftArrow и одновременно нажимать, чтобы повернуть его, то объект продолжает двигаться влево, даже если вы ничего не нажимаете.
private KeyboardEventSystem kBoard;
private Dictionary<KeyCode, bool> pressed = new Dictionary<KeyCode, bool>();
[ReadOnly] public bool moving;
[ReadOnly] public bool grounded = false;
void Start()
{
degeticaRb = GetComponent<Rigidbody2D>();
kBoard = gameObject.AddComponent<KeyboardEventSystem>();
kBoard.addKey(KeyCode.LeftArrow);
kBoard.addKey(KeyCode.RightArrow);
kBoard.addMap(KeyCode.A, KeyCode.LeftArrow);
kBoard.addMap(KeyCode.D, KeyCode.RightArrow);
pressed.Add(KeyCode.LeftArrow, false);
pressed.Add(KeyCode.RightArrow, false);
kBoard.KeyBoardEvent += KBoard_KeyBoardEvent;
}
private void KBoard_KeyBoardEvent(KeyboardEventType keyboardEventType, KeyCode keyCode)
{
if (!grounded)
return;
if (keyboardEventType == KeyboardEventType.DOWN)
pressed[keyCode] = true;
if (keyboardEventType == KeyboardEventType.UP)
{
moving = false;
pressed[keyCode] = false;
degeticaRb.angularVelocity = 0f;
degeticaRb.velocity = Vector3.zero;
}
}
public void DoRotation(int tIndex)
{
Vector3 rotAngle = transform.rotation.eulerAngles;
if (tIndex == 1)
{
rotAngle.z -= 90f;
transform.position = new Vector3(transform.position.x - 0.65f, transform.position.y);
}
else
{
rotAngle.z += 90f;
transform.position = new Vector3(transform.position.x + 0.65f, transform.position.y);
}
transform.eulerAngles = rotAngle;
}
private void FixedUpdate()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(Feet.position, 0.1f);
grounded = false;
foreach (Collider2D coll in colliders)
{
if (coll.tag == "wall")
{
grounded = true;
break;
}
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
{
moving = (pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow]);
if (moving && grounded)
{
moveAxis += pressed[KeyCode.RightArrow] ? accelaration : (accelaration * -1f);
moveAxis = Mathf.Clamp(moveAxis, -1, 1);
degeticaRb.velocity = new Vector2(moveAxis * moveSpeed, degeticaRb.velocity.y);
}
else
moveAxis = 0f;
}
else
moving = false;
DoMoveAnim();
}
Итак, переменная bool moving
остается активным, даже если я ничего не нажимаю.Помогите!