簡體   English   中英

UNITY,SHADER戰爭迷霧着色器導致統一崩潰

[英]UNITY, SHADER Fog of War shader causing unity crash

昨天我已經為我的RTS游戲實現了《戰爭迷霧》。 昨晚上床睡覺之前,所有設備工作都很好,我逐一檢查了一下,並進行了大量測試,以確保一切正常。

但是今天,當我嘗試運行游戲時,它會加載主菜單,但是當嘗試加載第一級時,Unity崩潰並且沒有給出任何原因。

我嘗試遍歷代碼和游戲對象,直到發現刪除與地形有關的自定義着色器后,它會停止崩潰並繼續運行游戲,但是我重新連接了它並運行了戰爭迷霧再次使我再次工作起來很好,但是當我關閉團結並再次打開它時,同樣的問題也發生在加載第一關時發生崩潰。

我不確定是導致問題的原因是着色器還是代碼。 我對着色器的經驗很少,但是如果有人可以看一下它的代碼並告訴我它是否有問題,我將非常感激。

    Shader "Fog Of War/Terrain" {
    Properties {
        _FOWTex ("Detail", 2D) = "gray" {}

        // Splat Map Control Texture
        [HideInInspector] _Control ("Control (RGBA)", 2D) = "red" {}
        [HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {}
        [HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {}
        [HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {}
        [HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {}

        // used in fallback on old cards & base map
        // [HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {}
        // [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader {
        Tags { "RenderType"="Opaque" 
                "SplatCount" = "4"
            }
        CGPROGRAM
        #pragma surface surf Lambert nolightmap

        struct Input {
            float2 uv_FOWTex;
            float2 uv_Control : TEXCOORD0;
            float2 uv_Splat0 : TEXCOORD1;
            float2 uv_Splat1 : TEXCOORD2;
            float2 uv_Splat2 : TEXCOORD3;
            float2 uv_Splat3 : TEXCOORD4;
        };

        sampler2D _Control, _FOWTex;
        sampler2D _Splat0,_Splat1,_Splat2,_Splat3;

        void surf (Input IN, inout SurfaceOutput o) {
            fixed4 splat_control = tex2D (_Control, IN.uv_Control);
            fixed3 col;
            col  = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb;
            col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb;
            col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb;
            col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb;
            o.Albedo = col;
            fixed3 c = tex2D (_FOWTex, IN.uv_FOWTex).aaa;
            c = 1-c;
            o.Albedo *= c;
        }
        ENDCG
    }
    FallBack off
}

着色器不太可能導致應用程序崩潰。 如果着色器存在問題,則Unity將無法編譯該着色器,並且使用該着色器的所有內容都將變為純亮的粉紅色。

我在着色器中看不到任何嚴重錯誤,但是這行代碼:

float2 uv_FOWTex;

在您的輸入結構中,我認為可能是不必要的。

要對其進行調試,可以將“戰爭迷霧”着色器精簡到可以獲取的基本程度和簡單程度。 然后查看它是否一直崩潰。 它不是,然后逐漸將其重新添加到着色器中,直到達到為止。

但是當涉及到崩潰時,通常是由於您對非托管代碼的調用做了一些不好的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM