示例#1
0
    void MovePlayer()
    {
        Vector2 relPos       = WorldToRelative(transform.position);
        Vector2 relMoveInput = WorldToRelative(input.GetMoveInput());

        bool onGround = relPos.y == -frameDist;

        float maxHspeed = walkSpeed * Time.deltaTime;

        hspeed = Mathf.Min(maxHspeed,
                           relMoveInput.x * maxHspeed + hspeed * (onGround ? horizInertiaGround : horizInertiaAir));

        if (onGround && Input.GetButtonDown(input.jump))
        {
            vspeed += jumpSpeed * Time.deltaTime;
        }
        vspeed -= gravity * Time.deltaTime;

        hspeed = Mathf.Clamp(hspeed,
                             -frameDist + halfWidth - relPos.x,
                             frameDist - halfWidth - relPos.x);
        vspeed = Mathf.Clamp(vspeed,
                             -frameDist - relPos.y,
                             frameDist - height - relPos.y);

        transform.position += RelativeToWorld(new Vector3(hspeed, vspeed, 0));
        relPos              = WorldToRelative(transform.position);
    }