У меня есть класс, который отвечает за управление персонажем. Но код в этом классе не работает.
private ObjectSequence Patrocle;
public bool moving = false;
private float moveAxis = 0;
public float accelaration = 0.1f;
public float moveSpeed = 10f;
public Rigidbody2D rBody;
private Dictionary<KeyCode, bool> pressed = new Dictionary<KeyCode, bool>();
void Start()
{
pressed.Add(KeyCode.LeftArrow, false);
pressed.Add(KeyCode.RightArrow, false);
Patrocle = GetComponent<ObjectSequence>();
}
private void FixedUpdate()
{
moving = pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow];
if (moving)
{
moveAxis += pressed[KeyCode.RightArrow] ? accelaration : (accelaration * -1f);
moveAxis = Mathf.Clamp(moveAxis, -1, 1);
rBody.velocity = new Vector2(moveAxis * moveSpeed, rBody.velocity.y);
}
else
moveAxis = 0f;
}
Он должен двигаться вправо, но ничего не делает отсутствующим. В чем проблема?
Он не двигается, потому что вы путаете KeyCode
со средством определения, нажата ли клавиша или нет.
KeyCode.LeftArrow
— это просто значение, обозначающее клавишу со стрелкой влево. Он не изменится, если нажата клавиша со стрелкой влево.
Точнее, проблема заключается в следующей строке:
moving = pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow];
Вместо этого попробуйте следующее:
moving = (Input.GetKey(KeyCode.LeftArrow)) ^ (Input.GetKey(KeyCode.RightArrow))
Однако он пытается провести исключительное ИЛИ.
о да, вы совершенно правы :D так увлекся битовыми вещами на той неделе, что забыл, что это работает и с логическими значениями ^^
Как проверить, нажата ли стрелка влево или вправо? В этом случае они всегда будут ложными.