【发布时间】:2018-10-24 04:39:51
【问题描述】:
昨天我为我的 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 崩溃,那么您最好在他们的问题跟踪器站点创建票证并将您的崩溃日志也提供给他们。