2015-12-22 100 views
2

我有一個腳本,通過使用鼠標中鍵控制Unity中正交相機平移運動。在世界中心(0,0,0)的空GameObject(例如名字MainCamPivot(請看圖片))作爲相機的父母。相機本身具有Vector3(45f,225f,0f)的局部歐拉角。我可以平移/在X很好地移動相機和Y軸,與此腳本(安裝到照相機):Limit Unity正交相機平移運動

public float panSpeed = 0.05f; 

private Vector3 lastMousePos; 

void Start() 
{ 
    lastCamPos = transform.position; 
} 

void Update() 
{ 
    if(Input.GetMouseButtonDown(2)) 
    { 
     lastMousePos = Input.mousePosition; 
    } 
    if(Input.GetMouseButton(2)) 
    { 
     Vector3 touchDeltaPosition = Input.mousePosition - lastMousePos; 
     transform.Translate(-touchDeltaPosition.x * panSpeed, -touchDeltaPosition.y * panSpeed, 0); 
     lastMousePos = Input.mousePosition; 
    } 

    // To limit the orthographic camera panning movement: 
    if(transform.localPosition.x < 10f) transform.localPosition = new Vector3(10f, transform.localPosition.y, 16.3f); 
    if(transform.localPosition.x > 23f) transform.localPosition = new Vector3(23f, transform.localPosition.y, 16.3f); 
    if(transform.localPosition.y < 15f) transform.localPosition = new Vector3(transform.localPosition.x, 15f, 16.3f); 
    if(transform.localPosition.y > 28f) transform.localPosition = new Vector3(transform.localPosition.x, 28f, 16.3f); 
} 

爲了限制相機搖攝運動,我設置爲X一些限制和的Y位置相機。問題是相機的Z位置值總是變化,因此設置相機的Z位置將會使相機鍋固定位置/移動斜像下面的圖片:

Wrong camera movement

什麼最好的方法來正確限制拼寫正確的攝像機移動,使用腳本? (如下列圖示)

Camera panning movement should follow mouse movement

+0

刪除我的答案,我意識到你已經在玩當地的位置。 – Everts

+0

你解決了這個問題嗎? 嘗試使用兩個支點,一個支持腳本,另一個支持反映z更改。我爲我的一個項目做了這樣的事情。 –

回答

0

如何代替使用樞轉時,設置相機的基於在當播放器按住按鈕鼠標位置的差的位置。你上面要做的是將相機相對於塊狀物體移動。相反,您應該將相機相對於自身移動。

獲取鼠標的位置,當用戶點擊向下按鈕,並在LateUpdate(),而玩家仍持有按鈕按下,撥打:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraMovement : MonoBehaviour { 

    private Vector3 InitialClickPosition; 
    private bool Pan = false; 
    private const int MOUSE_BUTTON = 0; 

    private void LateUpdate() 
    { 
     if (Input.GetMouseButtonDown(MOUSE_BUTTON)) 
     { 
      InitialClickPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
     } 
     else if (Input.GetMouseButton(MOUSE_BUTTON)) 
     { 
      var difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position; 
      Camera.main.transform.position = InitialClickPosition - difference; 
     } 
    } 
} 

工程。