//wall jump + dash + jumpbutton = go left? xd public IEnumerator Dash(GetDirectionalInputDelegate GetDirectionalInput) { startDashTime = Time.time; // velocity.x = dashDistance / dashTime; animator.SetBool("dash", true); // yield return new WaitForSeconds(0.1); Vector2 oldVelocity = velocity; velocity.x = 0; velocity.y = 0; // RaycastHit2D raycastHit = Physics2D.Raycast(new Vector2(boxCollider.bounds.max.x, boxCollider.bounds.max.y), Vector2.right, dashDistance); yield return(new WaitForSeconds(dashReadingDirectionTime)); dashDirection = GetDirectionalInput(); Vector2 shift = Vector2.zero; if (dashDirection.x != 0 || dashDirection.y != 0) { float skinWidth = 0.1f; Vector2[] verts = new Vector2[4]; verts[0] = transform.TransformPoint(boxCollider.offset + new Vector2(-boxCollider.size.x + skinWidth, boxCollider.size.y - skinWidth) * 0.5f); verts[1] = transform.TransformPoint(boxCollider.offset + new Vector2(boxCollider.size.x - skinWidth, boxCollider.size.y - skinWidth) * 0.5f); verts[2] = transform.TransformPoint(boxCollider.offset + new Vector2(boxCollider.size.x - skinWidth, -boxCollider.size.y + skinWidth) * 0.5f); verts[3] = transform.TransformPoint(boxCollider.offset + new Vector2(-boxCollider.size.x + skinWidth, -boxCollider.size.y + skinWidth) * 0.5f); if (dashDirection.x == 0) { shift = dashDirection.y == 1 ? CalculateDashShift(verts[0], verts[1], 6, dashDirection, dashDistance, characterController.platformMask) : CalculateDashShift(verts[3], verts[2], 6, dashDirection, dashDistance, characterController.platformMask); } else if (dashDirection.y == 0) { shift = dashDirection.x == 1 ? CalculateDashShift(verts[1], verts[2], 6, dashDirection, dashDistance, characterController.platformMask) : CalculateDashShift(verts[0], verts[3], 6, dashDirection, dashDistance, characterController.platformMask); } else { shift = dashDirection.x == dashDirection.y ? CalculateDashShift(verts[0], verts[2], 6, dashDirection, dashDistance, characterController.platformMask) : CalculateDashShift(verts[1], verts[3], 6, dashDirection, dashDistance, characterController.platformMask); } } velocity.x = shift.x / (dashTime - dashReadingDirectionTime); velocity.y = shift.y / (dashTime - dashReadingDirectionTime); yield return(new WaitForSeconds(dashTime - dashReadingDirectionTime)); // Debug.Log(isDashing); // this.transform.position = new Vector2(this.transform.position.x, this.transform.position.y) + shift; // yield return new WaitForEndOfFrame(); movementController.jumpStartTime = Time.time - movementController.jumpDuration / 2; if (characterController.isGrounded) { velocity.y = 0; } else if (dashDirection.y == 0) { movementController.jumpStartTime = Time.time - movementController.jumpDuration - movementController.floatDuration / 2; velocity.y = movementController.CalculateFloatingVelocity(); } else if (dashDirection.y > 0) { movementController.jumpStartTime = Time.time - movementController.jumpDuration / 2; velocity.y = movementController.CalculateJumpingVelocity(); } else { movementController.jumpStartTime = Time.time - movementController.jumpDuration - movementController.floatDuration; velocity.y = -movementController.jumpSpeed; } velocity.x = dashDirection.x * 6; animator.SetBool("dash", false); isDashing = false; }