Beispiel #1
0
    /// <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);
        }
    }
Beispiel #2
0
    // Update is called once per frame
    void FixedUpdate()
    {
        CalculateVelocity();

        controller.Move(velocity * Time.deltaTime, dInput);
    }