/// <summary> /// Tries to move any objects that are above this one /// </summary> /// <param name="deltaMove">How much to move each object</param> protected void MoveObjectsAbove(Vector2 deltaMove) { List <ObjectController2D> objsToMove = new List <ObjectController2D>(); float rayLength = skinWidth * 2; float directionX = Mathf.Sign(deltaMove.x); for (int i = 0; i < verticalRayCount; i++) { Vector2 rayOrigin = directionX == 1 ? raycastOrigins.topRight : raycastOrigins.topLeft; rayOrigin += Vector2.right * (verticalRaySpacing * i) * -directionX; RaycastHit2D[] hits = Physics2D.RaycastAll(rayOrigin, Vector2.up, rayLength, pConfig.standOnCollisionMask); Debug.DrawRay(rayOrigin, Vector2.up * rayLength, Color.cyan); foreach (RaycastHit2D hit in hits) { ObjectController2D obj = hit.transform.GetComponent <ObjectController2D>(); if (obj && !objsToMove.Contains(obj) && hit.distance > 0) { objsToMove.Add(obj); } } } foreach (ObjectController2D obj in objsToMove) { obj.Move(deltaMove); } }
// Update is called once per frame void FixedUpdate() { CalculateVelocity(); controller.Move(velocity * Time.deltaTime, dInput); }