コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        if (monstersIsAttacking.Count == 0)
        {
            Vector2 position = transform.position;

            Vector2 positionTarget = Vector2.zero;
            //Limit camera X
            if ((position.x - sizeBox.x >= Position_BottomLeft.x || (target.position.x - position.x) > 0) && (position.x + sizeBox.x <= Position_BottomLeft.x + sizeAera.x || (target.position.x - position.x) < 0))
            {
                positionTarget     = new Vector2(target.position.x, 0);
                position           = new Vector2(positionTarget.x, position.y);
                transform.position = (Vector3)position - Vector3.forward * 10;
            }
            //Limit camera Y
            if ((position.y - sizeBox.y >= Position_BottomLeft.y || (target.position.y - position.y) > 0) && (position.y + sizeBox.y <= Position_BottomLeft.y + sizeAera.y || (target.position.y - position.y) < 0))
            {
                positionTarget     = new Vector2(0, target.position.y);
                transform.position = new Vector3(position.x, positionTarget.y, -10);
            }
        }
        else
        {
            switch (state)
            {
            case stateCamera.Find:

                newPositionCamera = Vector2.zero;
                int i = 0;

                foreach (var monsterIsAttacking in monstersIsAttacking)
                {
                    newPositionCamera += Vector2.Lerp(target.position, monsterIsAttacking.position, 0.5f);
                    i++;
                }

                newPositionCamera /= i;
                state              = stateCamera.MoveTo;
                break;

            case stateCamera.MoveTo:
                Vector3 position = transform.position;
                transform.position = Vector3.Lerp(position, (Vector3)newPositionCamera - (Vector3.forward * 10), smoothSpeed);
                //Debug.Log((newPositionCamera - (Vector2)position).magnitude);
                if ((newPositionCamera - (Vector2)position).magnitude <= smoothSpeed)
                {
                    state = stateCamera.Find;
                }
                break;
            }
        }
    }
コード例 #2
0
    // Update is called once per frame
    void Update()
    {
        if (target != null)
        {
            if (attackingFoes.Count == 0)
            {
                Vector2 position = transform.position;

                Vector2 positionTarget = Vector2.zero;
                //Limit camera X
                if ((position.x - sizeBox.x >= bottomLeftPosition.x || (target.position.x - position.x) > 0) &&
                    (position.x + sizeBox.x <= bottomLeftPosition.x + (parameters.mapSizeX * parameters.cellSize.x) ||
                     (target.position.x - position.x) < 0))
                {
                    positionTarget     = new Vector2(target.position.x, 0);
                    position           = new Vector2(positionTarget.x, position.y);
                    transform.position = (Vector3)position - Vector3.forward * 10;
                }

                //Limit camera Y
                if ((position.y - sizeBox.y >= bottomLeftPosition.y || (target.position.y - position.y) > 0) &&
                    (position.y + sizeBox.y <= bottomLeftPosition.y + (parameters.mapSizeY * parameters.cellSize.y) ||
                     (target.position.y - position.y) < 0))
                {
                    positionTarget     = new Vector2(0, target.position.y);
                    transform.position = new Vector3(position.x, positionTarget.y, -10);
                }
            }
            else
            {
                Vector2 newPositionCamera = Vector2.zero;
                switch (state)
                {
                case stateCamera.Find:
                    int i = 0;

                    foreach (var monsterIsAttacking in attackingFoes)
                    {
                        newPositionCamera += Vector2.Lerp(target.position, monsterIsAttacking.position, 0.5f);
                        i++;
                    }

                    newPositionCamera /= i;
                    state              = stateCamera.MoveTo;
                    break;

                case stateCamera.MoveTo:
                    Vector3 position = transform.position;
                    transform.position = Vector3.Lerp(position,
                                                      (Vector3)newPositionCamera - (Vector3.forward * 10), smoothSpeed);

                    if ((newPositionCamera - (Vector2)position).magnitude <= smoothSpeed)
                    {
                        state = stateCamera.Find;
                    }

                    break;
                }
            }

            if (screenShake)
            {
                if (shakeDuration > 0)
                {
                    transform.localPosition += Random.insideUnitSphere * shakeMagnitude;

                    shakeDuration -= Time.deltaTime * dampingSpeed;
                }
                else
                {
                    screenShake   = false;
                    shakeDuration = 0f;
                }
            }
        }
    }