[Unity] Rendering 相關的 Event Functions 筆記

很多渲染套件或特效都會用上 OnPostRenderOnRenderImage 等,是一般 GameObject 上撰寫遊戲邏輯時較少用到的事件。

最近在大量處理著與畫面相關的項目,感到對這些事件不夠熟悉,於是重新讀過一些資料,留些筆記備忘。

筆記

(依照呼叫順序排列) 條件 主要用法
OnWillRenderObject is visible 每個攝影機會對每個物件分別觸發一次
OnPreCull camera only 在渲染前修改 camera 的參數
OnBecameVisible 如字面
OnBecameInvisible 如字面
OnPreRender camera only
OnRenderObject 在物件上的腳本呼叫 Graphic.Draw
OnPostRender camera only
OnRenderImage 後制特效常用

物件被遮擋時,renderer.isVisible 一般會為 false。但若只是要檢查是否在 camera frustum 中,可以:

1
2
3
4
public static bool IsVisibleFrom (this Renderer renderer, Camera camera) {
Plane[] planes = GeometryUtility.CalculateFrustumPlanes (camera);
return GeometryUtility.TestPlanesAABB (planes, renderer.bounds);
}

參考