unity實戰 實現滑鼠選擇物件前置顯示
需求介紹:
實現玩家選中的物件在前置顯示
實現方案:
方案一:深度寫入和深度檢測
說明:
ZTest:深度測試(LEqua小於等於、Less小於、Greater大於、Equal等於 , NotEqual不等於)
預設是LEqual,是一個對比顏色深度的方式,LEqual是表示新顏色小於等於舊顏色的深的時候,即替覆蓋顏色,從上面寫入的深度快取裡拿到自己的深度進行對比
ZWrite:深度寫入(On開啟、Off關閉)
預設是On,這個定義表示這個材質的顏色將會寫入快取當中,記錄當前顏色的深度,可以與其他顏色進行深度對比,這個引數是為深度檢測服務的
在shader裡面兩引數是隱式存在,如果要改變得顯式修改。
當前的需求需要動態的改變當前的渲染順序和深度檢測方式,可以通過更換shader或者材質來實現(改引數的方式我沒看到,應該是有的,但是shader我現在並不是特別的瞭解,還在學習中)
遇到的問題:(未解決)
模型去掉了深度檢測之後,模型拿的武器,如果在背後的時候會渲染在身體前面,會穿透。(身體和武器的貼圖是同一張)
方案總結
這個方案雖然實現這個功能不行,但是通過深度快取和深度測試可以實現穿牆顯示的效果,即不希望玩家在牆後面的時候被完全擋住的時候使用這個方案是可行的。思路是調整地面,山體,阻擋,和角色渲染順序(由於已經關閉了深度測試,引起渲染的前後就完全由渲染順序決定,這裡只要排好序)如果想要做一些身體的變化可以shader寫一些效果。
方案二:鏡頭使用layer分層渲染
說明:
camera上有一個Culling Mask引數,可以選擇鏡頭渲染的Layer層,比如ui,hero等等可以自己設定。
兩個鏡頭綁在一起的時候,那麼鏡頭引數是一致的,可以將兩個鏡頭顯示的內容合併在一起,比如鏡頭1顯示地表,鏡頭2顯示角色。
總結:
優點是分層實現,缺點多是多了鏡頭,效率會有一定影響。多了肯定很吃效能。得儘量把不需要的引數去掉。
參考部落格:
深度測試和深度寫入例子講解,很容易懂
https://www.cnblogs.com/kane0526/p/9845765.html