我有一个负责控制角色的课程。但是此类中的代码不起作用。
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;
}
它应该向右移动,但不会丢失任何东西。有什么问题吗?
答案 0 :(得分:2)
它不会移动,因为您将KeyCode
与用来检测是否按下某个键的方法相混淆。
KeyCode.LeftArrow
只是一个指定左箭头键的值。如果按下向左箭头键,则不会更改。
更确切地说,问题在于以下几行:
moving = pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow];
请尝试以下操作:
moving = (Input.GetKey(KeyCode.LeftArrow)) ^ (Input.GetKey(KeyCode.RightArrow))