場景相機可滑動的邊界
如圖,我希望把相機左右移動來查看全部場景的內容,但是在移動過程中又不能超過場景的邊界,這個時候我們需要設置相機的邊界值,我一開始想到的方式是給定兩邊一個一值,移動的時候判斷相機的X座標在不在設定的範圍之內。這樣做法是有問題的,比如我當前的設置的分辨是19201080相機移動的邊界剛剛好,
當我的分辨率和我的標準分辨不一樣的時候問題就出現了比如這樣的情況:分辨率 :21601080
你會發現相機的的可視範圍超過了場景範圍,
因爲我們是不改變相機和場景的距離和相機的視圖夾角,所以就需要算出當前分辨率和標準分辨率下他們之間X的偏移的差值。在計算差值過程中,又碰到了一個問題,因爲相機的高度和寬度都會影響到這個偏移的值。也是有兩個變量。我們需要先算一個值,在算計另一個值。只恨高中數學沒有學好。找不出合理的方程式。
另闢捷徑
思考了好幾天,之前都在想計算偏移的方程式,在一個談論到射線檢測中,突發奇想:我可以在場景中加入兩個臨界的碰撞體,判斷這兩個碰撞體在不在相機範圍內就可以了,如果在相機範圍內,則相機就移動到了邊界。
檢測代碼
// 是否超過了場景的邊界
public bool IsExceedSceneBoundary()
{
GameObject go = GameObject.Find("CJ/Colliders/Buildings/you");
GameObject go1 = GameObject.Find("CJ/Colliders/Buildings/zuo");
if (go == null || go1 == null)
{
return true;
}
Vector3 tmp = TPCamera.instance.mainUICamera.WorldToScreenPoint(go.transform.position);
if (tmp.x > 0 && tmp.x < Screen.width)
{
return true;
}
Vector3 tmp1 = TPCamera.instance.mainUICamera.WorldToScreenPoint(go1.transform.position);
if (tmp1.x > 0 && tmp1.x < Screen.width)
{
return true;
}
return false;
}
使用向量的點剩
點乘公式
取邊界點的法向量和相機的法向量,根據公式算出夾角,在和相機的視角比較,也能判斷邊界。