void DashSlash(int dir) { if (dir == 0) { dir = _anim.Facing; } if (dir == 0) { return; } RaycastHit r; Vector3 origin = transform.position; float[] distlist = new float[5]; float dashDist = 4f; Vector3 dirVec = new Vector3(dir, 0); int gMask = Layers.GetGroundMask(false); Physics.Raycast(origin + new Vector3(0, 0.8f, 0), dirVec, out r, dashDist, gMask); Debug.DrawRay(origin + new Vector3(0, 0.8f, 0), dashDist * dirVec, (Color.white)); distlist[0] = r.distance; Physics.Raycast(origin + new Vector3(0, 0.5f, 0), dirVec, out r, dashDist, gMask); Debug.DrawRay(origin + new Vector3(0, 0.5f, 0), dashDist * dirVec, (Color.white)); distlist[1] = r.distance; Physics.Raycast(origin + new Vector3(0, 0.2f, 0), dirVec, out r, dashDist, gMask); Debug.DrawRay(origin + new Vector3(0, 0.2f, 0), dashDist * dirVec, (Color.white)); distlist[2] = r.distance; Physics.Raycast(origin + new Vector3(0, -0.15f, 0), dirVec, out r, dashDist, gMask); Debug.DrawRay(origin + new Vector3(0, -0.15f, 0), dashDist * dirVec, (Color.white)); distlist[3] = r.distance; Physics.Raycast(origin + new Vector3(0, -0.45f, 0), dirVec, out r, dashDist, gMask); Debug.DrawRay(origin + new Vector3(0, -0.45f, 0), dashDist * dirVec, (Color.white)); distlist[4] = r.distance; float shortest = dashDist; foreach (float f in distlist) { if (f == 0) { continue; } if (f < shortest) { shortest = f; } } shortest -= 0.5f; if (shortest < 0) { shortest = 0; } _anim.PlayDashSlashAnim(shortest * dir); Vector3 endpos = origin + (shortest * dirVec); transform.position = endpos; _rigidbody.velocity = Vector3.zero; dashPauseTimer = dashPauseDuration; }