This commit is contained in:
JA
2026-07-06 20:19:52 +08:00
parent c29af11369
commit e7891d7e00
4 changed files with 144 additions and 3 deletions
+18 -2
View File
@@ -66,6 +66,14 @@ namespace IndianOceanAssets.Engine2_5D
[Tooltip("红圈扩散速度(世界单位/秒),独立于波纹扩散速度")]
[SerializeField] private float ringExpandSpeed = 15f;
[Header("Shader 引用")]
[Tooltip("直接拖入 Assets/Light/shaders/EchoRing.shader。\n"
+ "用序列化字段引用而不是 Shader.Find,确保打包时构建管线能静态识别,"
+ "不会被 shader stripping 剔除(否则运行时会 fallback 成粉色错误着色器)。\n"
+ "留空时仍会尝试 Shader.Find 兜底,但需要把该 shader 加入 "
+ "GraphicsSettings 的 Always Included Shaders 列表。")]
[SerializeField] private Shader ringShader;
[Header("冷却")]
[Tooltip("回声冷却时间(秒)")]
[SerializeField] private float cooldown = 3f;
@@ -128,7 +136,10 @@ namespace IndianOceanAssets.Engine2_5D
// 不挂载到玩家下——回声中心固定,不跟随玩家移动
// 创建材质(运行时)
var shader = Shader.Find("IndianOcean/EchoRing");
// 优先使用序列化字段引用的 shader(构建管线可静态识别,不会被剔除);
// 字段为空时再尝试 Shader.Find 兜底(必须同时把 shader 加入 GraphicsSettings
// 的 Always Included Shaders,否则打包后 Find 会返回 null → 粉色错误着色器)。
var shader = ringShader != null ? ringShader : Shader.Find("IndianOcean/EchoRing");
if (shader != null)
{
_ringMaterial = new Material(shader);
@@ -142,7 +153,12 @@ namespace IndianOceanAssets.Engine2_5D
}
else
{
Debug.LogError("[EchoSystem] 找不到 IndianOcean/EchoRing shader");
Debug.LogError(
"[EchoSystem] 找不到 IndianOcean/EchoRing shader!红圈将不会渲染。\n"
+ "修复方法(二选一):\n"
+ " 1) 把 Assets/Light/shaders/EchoRing.shader 拖到本组件的 Ring Shader 字段;\n"
+ " 2) Edit → Project Settings → Graphics → Always Included Shaders "
+ "里添加该 shader,然后重新打包。");
}
_ringVisual.SetActive(false);