#c# #unity3d
#c# #unity3d
Вопрос:
У меня есть класс, который отвечает за управление символом. Но код в этом классе не работает.
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;
}
Он должен двигаться вправо, но это ничего не делает отсутствующим. В чем проблема?
Комментарии:
1. Как вы проверяете, нажата ли стрелка влево или стрелка вправо? В этом случае они всегда будут false .
Ответ №1:
Он не перемещается, потому что вы путаете KeyCode
со средством определения, нажата клавиша или нет.
KeyCode.LeftArrow
это просто значение, обозначающее клавишу со стрелкой влево. Он не изменится, если нажать клавишу со стрелкой влево.
Точнее, проблема заключается в следующей строке:
moving = pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow];
Вместо этого попробуйте следующее:
moving = (Input.GetKey(KeyCode.LeftArrow)) ^ (Input.GetKey(KeyCode.RightArrow))
Комментарии:
1. Он пытается сделать эксклюзивное ИЛИ хотя.
2. о, да, вы совершенно правы: D на той неделе был настолько увлечен побитовыми вещами, что я забыл, что это работает и на bools ^^