Beispiel #1
0
    public void AddCommand(float camPos, float camDist)
    {
        ICommand distCommand;
        ICommand posCommand;

        if (lastCamPos == camPos) // No movement
        {
            posCommand = new NoCommand();
        }
        else if (lastCamPos < camPos) // Moved right
        {
            posCommand = new CameraMoveRight();
        }
        else // Moved left
        {
            posCommand = new CameraMoveLeft();
        }

        if (lastCamDist == camDist) // No movement
        {
            distCommand = new NoCommand();
        }
        else if (lastCamDist < camDist) // Zoomed out
        {
            distCommand = new CameraForward();
        }
        else // Zoomed in
        {
            distCommand = new CameraBackward();
        }

        properties.SetCommands(currentSlot, posCommand, distCommand);
        currentSlot++;
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.A) || _joystick.Horizontal == -1)
        {
            _cameraLeft = new CameraMoveLeft(_cameraSpeed);
            _cameraLeft.Excute();
        }
        else if (Input.GetKey(KeyCode.D) || _joystick.Horizontal == 1)
        {
            _cameraRight = new CameraMoveRight(_cameraSpeed);
            _cameraRight.Excute();
        }
        else if (Input.GetKey(KeyCode.W) || _joystick.Vertical == 1)
        {
            _cameraUp = new CameraMoveUp(_cameraSpeed);
            _cameraUp.Excute();
        }
        else if (Input.GetKey(KeyCode.S) || _joystick.Vertical == -1)
        {
            _cameraDown = new CameraMoveDown(_cameraSpeed);
            _cameraDown.Excute();
        }
        else if (Input.GetKeyDown(KeyCode.R))
        {
            //YZ평면을 기준으로 방향벡터 대칭이동
            Vector3 newForward = _camera.transform.forward;
            newForward.x *= -1;
            _camera.transform.forward = newForward;

            Plane plane = new Plane(Vector3.up, 0);

            float distance;
            Ray   ray = new Ray(_camera.transform.position, _camera.transform.forward);
            if (plane.Raycast(ray, out distance))
            {
                Vector3 newPos = ray.GetPoint(distance);
                _camera.transform.position -= newPos;
            }
        }

        _inputMode.Update();
    }