Не в состоянии сделать Wall Jump правильно - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь заставить моего игрока выпрыгнуть из стены. Я знаю, что могу сделать это, добавив силу в противоположном направлении. но мой игрок странно прыгает, и я пытался решить его, читая и просматривая учебник, но не могу сделать это сам. Я думаю, что мне нужен более профессиональный и опытный ум, чтобы решить эту проблему.

У меня есть 2 сценария, один отвечает за прыжок на стену, а другой отвечает за движение и прыжок с земли, и в этом сценарии я применил, если я нажал кнопку дольше, игрок будет прыгать выше.

Это PlayerScript

public class PLayer : MonoBehaviour {


    float input;
    public float moveSpeed = 10;
    bool jumpButtonPressed = false;

    float startingMoveSpeed;
    [Tooltip("move Speed when player jump")]
    public float jumpMoveSpeedDecrementor = 3;
    public float jumpForce = 10;
    Rigidbody2D rgbd;
     float groundCheckRadius = 0.1f;
    [HideInInspector]
    public bool grounded,wallJump;
    bool isJumping;



    // Use this for initialization
    void Start () {

        startingMoveSpeed = moveSpeed;
        wallJump = false;
    }
    private void Update()
    {
        if (!jumpButtonPressed)
        {
            jumpButtonPressed = Input.GetKeyDown(KeyCode.Z);
        }


    }
    // Update is called once per frame
    void FixedUpdate ()
    {


       //check if grounded or doing wall jump
        if (grounded|| wallJump)
        {
            animator.SetFloat("horizontalSpeed", Mathf.Abs(input));
            moveSpeed = startingMoveSpeed;
        }
        else
        {//if in the air mean jumping
            moveSpeed = jumpMoveSpeedDecrementor;
        }



       //if jump button press then jump
        if (jumpButtonPressed && grounded )
        {  
            isJumping = true;
            animator.SetTrigger("jump");
            rgbd.AddForce(Vector2.up * jumpForce*Time.deltaTime,ForceMode2D.Impulse);

            jumpButtonPressed = false;
        }

        }
        if (Input.GetKeyUp(KeyCode.Z))
        {
            isJumping = false;
        }
    }



}

Это второй сценарий, который учитывает прыжок на стену. Я добавил физический материал к стене с коэффициентом трения 0.02f.

public class WallJump : MonoBehaviour {
    PLayer player;
    public float rayDistance;
    public int speed = 20;
    public int speedY=300;
    public LayerMask playerLayer;
    // Use this for initialization
    void Start () {
        player = GetComponent<PLayer>();
    }

    // Update is called once per frame
    void Update () {
       //ray should not collide with the self
        Physics2D.queriesStartInColliders= false;
   //ray cast
          RaycastHit2D hit = Physics2D.Raycast(transform.position,Vector2.right*transform.localScale.x, rayDistance);
            //if hit wall and jump
            if (Input.GetKeyDown(KeyCode.Z ) && !player.grounded && hit.collider.tag=="wall")
            {
            player.wallJump = true;
            Debug.Log("adding force");
   //add force in -X and y direction
            GetComponent<Rigidbody2D>().AddForce(new Vector2(speedY*hit.normal.x,speedY),ForceMode2D.Impulse);
            //  GetComponent<PLayer>().flipUsingScale();
            }
        else
         {
            player.wallJump = false;
         }


    }
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;
        Gizmos.DrawLine(transform.position, transform.position+ Vector3.right * transform.localScale.x * rayDistance);

    }
}

Спасибо, что читаете и помогаете такому незрелому программисту, как я.

Jump error

...