void VerticalCollisions(ref Vector3 velocity) { //проверка RayCasta по y float directionY = Mathf.Sign (velocity.y); //если число с минусом то 0, если с + то 1 float rayLenght = Mathf.Abs(velocity.y) + skinWidth; //убираем знак for (int i = 0; i< verticalRayCount; i++) { //рисуем четыре линии Vector2 rayOrigin = (directionY == -1)?raycastOrigins.bottomLeft:raycastOrigins.topLeft; //присваиваем значение в зависимости от знака rayOrigin += Vector2.right * (verticalRaySpacing * i + velocity.x); RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLenght, collisionMask); //пускаем луч для проверки с колизией слоя Debug.DrawRay(rayOrigin, Vector2.up * directionY * rayLenght, Color.red); //выводи луч if (hit) { if (hit.collider.tag == "Through") { if (directionY == 1 || hit.distance == 0) { soundSC.track("prize"); money = money.GetComponent<Money>(); money.createMoney (rayOrigin); } if (collisions.fallingThroughPlatform) { } if (playerInput.y == -1) { } } velocity.y = (hit.distance - skinWidth) * directionY; rayLenght = hit.distance; collisions.below = directionY == -1; collisions.above = directionY == 1; } } }