/// <summary>
    /// MonoBehaviour 개체를 초기화합니다.
    /// </summary>
    void Start()
    {
        // 필드를 초기화합니다.
        _parent       = GetComponentInParent <CameraZoneBorderParent>();
        _database     = DataBase.Instance;
        _stageManager = StageManager.Instance;
        _cameraFollow = Camera.main.GetComponent <CameraFollow>();

        // 경계선 객체를 획득합니다.
        EdgeCollider2D border = GetComponent <EdgeCollider2D>();

        Vector2[] points = border.points;

        // X 좌표가 같다면 수평 방향을 관리하는 경계입니다.
        if (points[0].x == points[1].x)
        {
            _isHorizontal = true;
            _border       = points[0].x + transform.position.x;
        }
        // Y 좌표가 같다면 수직 방향을 관리하는 경계입니다.
        else if (points[0].y == points[1].y)
        {
            _isHorizontal = false;
            _border       = points[1].y + transform.position.y;
        }
        // 그 외의 경우 예외 처리합니다.
        else
        {
            throw new Exception("타당하지 않은 CameraZoneBorder points 속성입니다.");
        }
    }
Пример #2
0
    /// <summary>
    /// MonoBehaviour 개체를 초기화 합니다.
    /// </summary>
    protected virtual void Start()
    {
        //
        _database               = DataBase.Instance;
        _stageManager           = StageManager.Instance;
        _camera                 = Camera.main;
        _camZ                   = _camera.transform.position.z;
        _cameraZoneParent       = CameraZoneParent.Instance;
        _cameraZoneBorderParent = CameraZoneBorderParent.Instance;
        _map    = _database.Map;
        _player = _stageManager.MainPlayer;

        // 카메라 관련 필드를 초기화합니다.
        {
            // 카메라 존 집합을 초기화합니다.
            CameraZone[] cameraZones = _cameraZoneParent.GetComponentsInChildren <CameraZone>();
            _cameraZones = new CameraZone[cameraZones.Length];
            foreach (CameraZone cameraZone in cameraZones)
            {
                // 음이 아닌 카메라 존 ID의 경우 집합에 추가합니다.
                int camZoneID = cameraZone._cameraZoneID;
                if (camZoneID >= 0)
                {
                    _cameraZones[cameraZone._cameraZoneID] = cameraZone;
                }
            }

            CameraZoneBorder[] borders = _cameraZoneBorderParent.GetComponentsInChildren <CameraZoneBorder>();
            foreach (CameraZoneBorder border in borders)
            {
                // 음이 아닌 식별자들에 대해서만 처리합니다.
                if (border._fromID >= 0 && border._toID >= 0)
                {
                    border._from = _cameraZones[border._fromID];
                    border._to   = _cameraZones[border._toID];
                }
            }

            // 시작 카메라 존을 맞춥니다.
            /// _startCameraZone = _cameraZones[0];
            _startCameraZone = _stageManager.GetCheckpointCameraZone
                                   (_database.GameManager.SpawnPositionIndex);
            if (_startCameraZone == null)
            {
                throw new Exception("시작 카메라 존이 설정되지 않았습니다.");
            }

            /// _currentCameraZone = _startCameraZone;
            UpdateCameraZone(_startCameraZone, false);
        }


        // 카메라 뷰 박스를 초기화합니다.
        InitializeCameraViewBox();
    }