首页 文章

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

提问于
浏览
0

我正在尝试为我的游戏创建一个RTS风格的摄像机控制系统,我已经撞墙了,我不确定如何继续 .

我想要发生的是以下内容:

  • 鼠标单击拖动=将摄像机移动到世界各地(正常)

  • 鼠标滚轮单击拖动=在世界各地旋转相机(工作)

  • 鼠标滚轮=使用MoveToward / Transform.Forward..etc放大/缩小(sorta有效)

在另一个脚本中,我有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

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

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

    if ( Input.GetAxis("Mouse ScrollWheel") > 0) {             
    transform.Translate(Vector3.forward * Time.deltaTime * 10000f * scrollAxis, Space.Self );
    initialPosition = transform.position;
    }
    

相关问题