Unity代码问题。角色不动

时间:2019-04-10 09:46:07

标签: 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 个答案:

答案 0 :(得分:2)

它不会移动,因为您将KeyCode与用来检测是否按下某个键的方法相混淆。

KeyCode.LeftArrow只是一个指定左箭头键的值。如果按下向左箭头键,则不会更改。

更确切地说,问题在于以下几行:

moving = pressed[KeyCode.LeftArrow] ^ pressed[KeyCode.RightArrow];

请尝试以下操作:

moving = (Input.GetKey(KeyCode.LeftArrow)) ^ (Input.GetKey(KeyCode.RightArrow))