Unity 5.4 - 无需FoV操作即可缩放RTS相机

时间:2016-12-30 22:28:47

标签: c# unity3d unity5

我试图为我的游戏创建一个RTS式的摄像机控制系统,而且我已经碰壁了,我不确定如何继续。

我想要发生的事情如下:

  1. 鼠标单击+拖动=将相机移动到世界各地(正常工作)
  2. 鼠标滚轮单击+拖动=在世界各地旋转相机(正常工作)
  3. 鼠标滚轮=使用MoveToward / Transform.Forward ..等放大/缩小(排序有效)
  4. 在另一个脚本中,我有FoV变焦工作,但它不适合我想要创建的体验类型。相反,我试图在相机指向的方向上移动相机。

    这个当前脚本的功能是90%,因为它可以执行上面列出的所有内容,但是当我在滚动到缩放后单击+拖动移动到新位置时,相机会重置为原来的位置。

    以下是Update()中发生的事情:

        void Update ()
    {
        currentPosition = transform.position;
        scrollAxis = Input.GetAxis ("Mouse ScrollWheel");
        if (Input.GetMouseButtonDown (0)) 
        {
            mouseOrigin = Input.mousePosition;  
            isPanning = true;
        }
        // cancel on button release
        if (!Input.GetMouseButton (0)) 
        {
            isPanning = false;
        }
        //move camera on X & Y
        else if (isPanning) 
        {
            Vector3 pos = Camera.main.ScreenToViewportPoint (Input.mousePosition - mouseOrigin);
            Vector3 move = new Vector3 (pos.x * -panSpeed, pos.y * -panSpeed, 0);
            Camera.main.transform.Translate (move, Space.Self);
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0 );
            transform.localPosition = new Vector3( transform.position.x, transform.position.y - (transform.position.y - (initialPosition.y)), transform.position.z );
        }
        //rotate camera with mousewheel click
        if (Input.GetMouseButton(2)) {
            yRotation -= Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime;
            yRotation = Mathf.Clamp(yRotation, -80, 80);
            xRotation += Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
            xRotation = xRotation % 360;
            transform.localEulerAngles = new Vector3(yRotation + initialRotation.x, xRotation + initialRotation.y, 0);
        }
        //zoom with scroll
        if ( Input.GetAxis("Mouse ScrollWheel") > 0 && !isPanning) {             
            transform.Translate(Vector3.forward * Time.deltaTime * 10000f * scrollAxis, Space.Self ); 
            transform.localPosition = new Vector3( transform.position.x, transform.position.y, transform.position.z );
        }
    
    }
    

    非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

在朋友的帮助下解决了这个问题。

每次缩放时都需要重置initialPosition Vector3,以防止弹回到原始位置。

dayExpenseVC.view.frame = childView.bounds
相关问题