unity, 判斷可見性

2021-09-07 00:22:17 字數 834 閱讀 5863

如果乙個物體被unity判定為」退一萬步講也一定不可見「,則unity不會去渲染它,但是如果我們給此物體新增了邏輯,這個邏輯仍然會被執行。

因此,假如這個邏輯是鉅耗效能的邏輯,比如說」mesh的每個頂點都按sin(t)波動「之類,那麼我們需要手動根據可見性去優化這個邏輯,比如不可見就停了它,或者不可見時執行乙個此邏輯的極簡版等。

所以需要能獲得物體的可見性。

方法1:

meshrender.isvisible;

如果meshrender.isvisible==true,說明unity認為這個mesh」退一萬步講也一定不可見「。

這個方法的好處是沒有一點兒額外開銷,因為在unity執行場景管理演算法的時候這些東西都已經得到了,而且一般來講最多也就是對數複雜度。

這個方法的侷限性是如果gameobject沒有meshrender這個元件,例如是乙個巨複雜的模型的根節點,那麼這個方法沒法直接用,只能把每個帶meshrender的子孫節點都遍歷一遍。

方法2:

bool i_can_see(gameobject object)

參考: 

這個方法好處是

1,不依賴於是否存在meshrender元件。

2,可以自建包圍盒,增加了靈活性,甚至可以故意造乙個錯誤的包圍盒來用(比如比模型實際範圍大一倍或者小一倍)。比如在複雜模型的根節點上建乙個名為boundingbox的切點,為它新增乙個boxcollider,調節這個boxcollider讓它包圍整個模型。

3,不用遍歷子孫節點,直接用視截體planes去判斷這個collider.bounds是否可見即可。

缺點是:這個判斷是有一小點兒開銷的,如果物體成百上千可能會導致可察覺的開銷。

低可見性覆蓋高可見性

本文只討論 public,protected,private,internal 和 virtual一起使用時的問題。1.公共基類定義 public virtual 方法,子類覆蓋時不能降低其可見性。namespace accessmodifier public class baseclass pub...

頁面可見性

1 頁面可見性 顯示的頁面 當前正在看的頁面 隱藏的頁面 我們沒有看到的頁面 2 給document新增visibilitychange事件,document.hidden為true則可見,為false則為隱藏,不同頁面之間切換,觸發visibilitychange事件。document.addev...

併發 可見性

變數的可見性分析 關鍵字 可見性案例驗證 volatile unsafe中loadforce方法實現讀屏障 可見性保證 同步volatile 魔術類記憶體屏障 記憶體屏障說明 loadforce實現volatile讀 快取資料置為無效 重新從主存載入 storeforce實現volatile寫 資料...