2016-12-30 8 views
0

私は自分のゲームのためにRTS-esqueカメラコントロールシステムを作成しようとしています。壁に当たったことがあります。 Unity 5.4 - FOV操作なしでRTSカメラをズームする

  • マウスのスクロールホイールが世界中+ドラッグ=回してカメラをクリックして

    1. マウスクリック+ドラッグ=世界中でカメラを動かし(作品)(作品:

      何が起こるしたいことは以下のとおりです。別のスクリプトでMoveToward/Transform.Forward..etcを使用して/アウト)

    2. マウスのスクロールホイール=ズーム(みかん作品)

    私は視野ズーム作業を持っているが、それはexperiencのタイプのための理想的ではありません私は創造したい。代わりに、私はそれが指示されている方向にカメラを物理的に移動しようとしています。

    この現在のスクリプトは、にすることができますが、ズームするためにスクロールした後に+ドラッグして新しい場所に移動すると、カメラは元の位置にリセットされます。

    は、ここで更新()で何が起こるかです:

    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); 
        } 
    
    } 
    

    すべてのヘルプははるかに高く評価され、感謝!

  • 答えて

    0

    友人の助けを借りて解決しました。

    ズームするたびにinitialPosition Vector3をリセットして、元の位置にスナップバックしないようにする必要がありました。

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