是否有一种方法可以自动禁用Unity中移动构建的法线地图?



我正在尝试为移动平台构建一个Unity游戏,我想知道是否有一种方法可以在不从其他平台上删除它们的情况下,从所有材料(标准着色器,内置管道)中删除法线地图。使用Unity 2021 LTS。我已经查看了项目设置,似乎没有一个简单的方法来做到这一点。

我最终找到了一个解决我自己问题的方法,所以我把它贴在这里,以防其他人需要。

用下面的代码创建一个名为NormalMapPreprocess.cs的文件,并将其放在Assets/Editor文件夹中,它将在构建时删除法线贴图。

using System.Collections.Generic;
using UnityEditor.Build;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
#if UNITY_ANDROID
public class NormalMapPreprocess : IPreprocessShaders
{
ShaderKeyword m_KeywordNormal;
public NormalMapPreprocess()
{
m_KeywordNormal = new ShaderKeyword("_NORMALMAP");
}
public int callbackOrder { get { return 0; } }
public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> data)
{
for (int i = data.Count - 1; i >= 0; --i)
{
if (data[i].shaderKeywordSet.IsEnabled(m_KeywordNormal))
{
data.RemoveAt(i);
}
}
}
}
#else
public class NormalMapPreprocess {}
#endif

不确定这是否是最好的解决方案,但至少它是有效的。

最新更新