這個(gè)是在場(chǎng)景中Quad的Shader
Shader "Custom/XRay"
{
SubShader
{
Tags { "Queue"="Transparent+1" }
Pass { Blend Zero One}
}
FallBack "Diffuse"
}
這個(gè)是可供xray看見(jiàn)里面的外表的Cube
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MakeSeeThrough : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
GetComponent<Renderer>().material.renderQueue = 3002;
}
}
場(chǎng)景中離相機(jī)近的是Quad ,Cube 較遠(yuǎn)
Cube 里面有一個(gè)Sphere
在拖動(dòng)Quad的時(shí)候,Quad里能顯示Sphere 而不顯示Cube
效果

原理
讓我們逐步分析渲染流程,解釋為什么拖動(dòng) Quad 時(shí)可以看到 Cube 內(nèi)部的 Sphere:
(1) 正常情況下(沒(méi)有 Quad)
Cube:
使用 Custom/XRay Shader,渲染隊(duì)列為 Transparent+1 (3001)。
渲染時(shí),Cube 不會(huì)顯示顏色(因?yàn)?Blend Zero One),但會(huì)寫(xiě)入深度緩沖。
Sphere:
由于 Cube 不會(huì)顯示顏色,Sphere 的顏色會(huì)透過(guò) Cube 顯示出來(lái)。
(2) 使用 Quad 并拖動(dòng)時(shí)
Quad:
使用 MakeSeeThrough 腳本,渲染隊(duì)列為 3002。
由于 Quad 的渲染隊(duì)列比 Cube 高,它會(huì)在 Cube 之后渲染。
渲染順序:
Cube:
使用 Custom/XRay Shader,渲染隊(duì)列為 3001。
渲染時(shí),Cube 不會(huì)顯示顏色(因?yàn)?Blend Zero One),但會(huì)寫(xiě)入深度緩沖。
Quad:
使用 MakeSeeThrough 腳本,渲染隊(duì)列為 3002。
渲染時(shí),Quad 會(huì)通過(guò)深度測(cè)試,并顯示在 Cube 的后面。
Sphere:
Sphere 的渲染隊(duì)列為默認(rèn)值(Geometry,2000),它會(huì)在 Cube 和 Quad 之前渲染。
由于 Cube 不會(huì)顯示顏色,Sphere 的顏色會(huì)透過(guò) Cube 顯示出來(lái)。
(3) 為什么拖動(dòng) Quad 時(shí)會(huì)顯示 Sphere
Quad 的作用:
Quad 的渲染隊(duì)列為 3002,確保它在 Cube 之后渲染。
由于 Cube 不會(huì)顯示顏色,Sphere 的顏色會(huì)透過(guò) Cube 顯示出來(lái)。
當(dāng) Quad 渲染時(shí),它會(huì)通過(guò)深度測(cè)試,并顯示在 Cube 的后面。
透視效果:
由于 Quad 不會(huì)顯示顏色,Sphere 的顏色會(huì)透過(guò) Quad 顯示出來(lái)。
拖動(dòng) Quad 時(shí),Quad 的位置和角度會(huì)改變,從而影響 Sphere 的可見(jiàn)區(qū)域。