Unity 2017.4.2this
1. 經過Camera組件獲取fov(這是vertical fov):spa
void Start() { Camera mainCamera = Camera.main; float fov = mainCamera.fieldOfView; Debug.Log("fov:" + fov); }
2. 計算horizontal fovcode
void Start() { Camera mainCamera = Camera.main; float fov = mainCamera.fieldOfView; Debug.Log("fov:" + fov); float fovInRads = fov * Mathf.Deg2Rad; float horizontalFovInRads = 2 * Mathf.Atan(Mathf.Tan(fovInRads / 2) * mainCamera.aspect); float horizontalFov = horizontalFovInRads * Mathf.Rad2Deg; Debug.Log("horizontal fov:" + horizontalFov); }
1. 用一張圖像做爲背景,效果以下:orm
在Main Camera下建立BackgroundQuad,localPosition=(0, 0, 100),localScale=(100, 100, 1)blog
2. 咱們但願背景圖像在水平方向上填滿,同時保持原圖寬高比,效果以下it
Sample Code:io
public class bg : MonoBehaviour { public Texture bgTexture; public Transform backgroundQuad; float CalcHorizontalFov() { float fovInRads = Camera.main.fieldOfView * Mathf.Deg2Rad; float horizontalFovInRads = 2 * Mathf.Atan(Mathf.Tan(fovInRads / 2) * Camera.main.aspect); return horizontalFovInRads * Mathf.Rad2Deg; } // Use this for initialization void Start() { float d = 100; // distance form camera to background quad float horizontalFov = CalcHorizontalFov(); float scaleX = Mathf.Tan(horizontalFov * Mathf.Deg2Rad / 2) * d * 2; float scaleY = scaleX * bgTexture.height / bgTexture.width; backgroundQuad.localPosition = new Vector3(0, 0, d); backgroundQuad.localScale = new Vector3(scaleX, scaleY, 1); } }