You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中进入游戏对象内部时球体Shader消失问题求助

解决透明球体内部看不到轮廓的问题

非Shader快速方案

  • 给球体加一个线框渲染器(Wireframe Renderer):在球体对象上添加WireframeRenderer组件(Unity自带组件,或Asset Store免费资源如Wireframe Renderer Kit),调整线框颜色和粗细,无论相机内外都能看到球体轮廓线。
  • 双球体嵌套:创建两个同球心球体,外层用原有透明材质,内层用低透明度纯色材质(比如半透白色),内层半径比外层小0.01左右。相机进入外层内部时,内层半透球体会呈现轮廓感,且不影响外层透明效果。

简易自定义Shader方案

Shader Graph可视化版本(适合新手)

  1. 创建新的Unlit Shader Graph并打开编辑器。
  2. 添加Camera Position和Object Position节点,用Vector3 Distance节点计算相机到球心的距离。
  3. 添加Sphere Mask节点,设置Radius为球体实际半径,将距离值输入到Distance端口。
  4. 用One Minus节点反转Sphere Mask输出,使相机在球内时Mask值为1,球外为0。
  5. 将反转后的Mask值连接到Color节点的Alpha通道,再把Color节点连到Master节点的Color端口。
  6. 调整Color的RGB为目标轮廓色(比如灰色),Alpha设为0.8左右。
  7. 将该Shader赋予材质,添加到球体的Materials数组中(和原透明材质叠加使用)。

手写极简Shader版本

创建新的Unlit Shader,替换为以下代码后赋予材质给球体:

Shader "Custom/InsideOutline"
{
    Properties
    {
        _OutlineColor ("Outline Color", Color) = (0.5,0.5,0.5,0.8)
        _SphereRadius ("Sphere Radius", Float) = 1.0
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent" }
        LOD 100
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float3 worldPos : TEXCOORD0;
            };

            float4 _OutlineColor;
            float _SphereRadius;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                float dist = distance(_WorldSpaceCameraPos, unity_ObjectToWorld._m03_m13_m23);
                float showOutline = step(dist, _SphereRadius);
                return _OutlineColor * showOutline;
            }
            ENDCG
        }
    }
}

使用时调整_SphereRadius为球体实际半径,_OutlineColor设置轮廓颜色和透明度,将该材质与原透明材质一同添加到球体的Materials数组即可。

内容的提问来源于stack exchange,提问作者repinSlun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:05:19