2016-07-23 55 views
1

我想讓我的相機放大和縮小,但我想鎖定它可以放大的量。儘管他們沒有達到我期望的結果,但我已經嘗試了一些東西。我的相機坐在X軸上旋轉65度,我想沿着對角軸移動它。提前致謝!夾角對角線移動/鉗位相機縮放

Camera.main.transform.Translate(0,0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 

上面的代碼以我想要的方式放大相機,但我不確定如何限制值。

cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime; 
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance); 
    Camera.main.transform.localPosition = (new Vector3(0, -cameraDistance, 0)); 

上面的代碼鉗位值,但只有在一個向上的方向

cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime; 
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance); 
    Camera.main.fieldOfView = -cameraDistance; 

上面的代碼鉗位值,並保持我的旋轉專注於播放器,雖然它扭曲的觀點很多的動作。

注意!我絕對不想改變我的相機視野!

+0

new Vector3(0,-cameraDistance,0)在y軸上移動,但是我收集到你更喜歡它在z軸上?嘗試新的Vector3(0,無論你喜歡,-cameraDistance) – Absinthe

+0

@Absint感謝您的評論,這將工作,雖然那麼我將不得不計算正確的高度以及那是我不知道該怎麼做。 – jozza710

回答

1

您仍然可以使用第一行工作的代碼,只需添加更多的邏輯。

//Checks if camera is inside of bounds 
if(Vector3.Distance(Camera.main.transform.position, targetObject.position) >= minCameraDistance && 
    Vector3.Distance(Camera.main.transform.position, targetObject.position) <= maxCameraDistance) { 
    //Do Translation 
    Camera.main.transform.Translate(0, 0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 
} 
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) < minCameraDistance) { //Checks if camera is too close to the target 
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - minCameraDistance + Mathf.Epsilon); 
} 
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) > maxCameraDistance) { //Check if the camera is too far from the target 
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - maxCameraDistance + Mathf.Epsilon); 
} 

我添加了一個targetObject(轉換變量),它代表距離計算的對象。

將其更改爲任何對象或Vector3以轉動攝像頭。例如:如果是起源把Vector3.zero而不是targetObject.position

如果兩個else語句鉗位值,所以相機不走的太近或太遠從minCameraDistancemaxCameraDistance值。

+0

謝謝,非常有幫助,並解釋得非常好! – jozza710