目录
第二步 命名为CubeOutLine的Shader文件 代码如下
第三步 将创建的Shader拖到新建的Material材质球上
效果如下
实现方案 自定义Shader
第一步 创建Shader
第二步 命名为CubeOutLine的Shader文件 代码如下
Shader "Custom/CubeOutline"
{
Properties
{
LineColor("LineColor", color) = (1,1,1,1)
CubeColor("CubeColor", color) = (1,1,1,1)
LineWeight("LineWeight", range(0,0.5)) = 0.1
}
SubShader
{
Tags { "Queue" = "Transparent" }
Pass {
//如果要显示背面的线框,取消下面两个注释即可
//cull off
//ZWrite off
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
fixed4 LineColor;
fixed4 CubeColor;
fixed LineWeight;
struct a2v {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert(a2v v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
float4 frag(v2f i) : SV_Target {
fixed4 col = CubeColor;//Cube的基础颜色
col += saturate(step(i.uv.x, LineWeight) + step(1 - LineWeight, i.uv.x) + step(i.uv.y, LineWeight) + step(1 - LineWeight, i.uv.y)) * LineColor;
if (i.uv.x < LineWeight || i.uv.x > 1 - LineWeight || i.uv.y < LineWeight || i.uv.y > 1 - LineWeight)
{
col = LineColor;
}
return col;
}
ENDCG
}
}
}
第三步 将创建的Shader拖到新建的Material材质球上
第四步 将材质球拖到游戏对象上
延伸扩展
MaterialPropertyBlock更改材质颜色不会重新实例化一份材质、能进行动态合批,当物体比较多时能有效降低Drawcall提高帧率
属性中
"LineColor"为内部变量命名 后续如使用MaterialPropertyBlock即可通过此变量名Get/Set值
LineColor为外部变量命名 也就是检查器中能见的
[2048]Unity多个物体共用一个材质 实现更改时互不干扰的解决方案https://blog.csdn.net/Kuromi__/article/details/136742019
参考博主https://blog.csdn.net/Vitens/article/details/107274414