先修复一下,错误的场景 删除不必要的钓场资产 修复into场景 update:更新meta文件,修复报错 update:修复资源 修复第一章节建造 修复建造第三章 update:删除多余内容 update:更新README.md update:还原图标 update:更新README update:更新配置
80 lines
2.9 KiB
C#
80 lines
2.9 KiB
C#
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using Coffee.UISoftMaskInternal.AssetModification;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Coffee.UISoftMask
|
|
{
|
|
internal class SoftMaskableShaderModifier : TextAssetModifier
|
|
{
|
|
private class ShaderModifier : ITextModifier
|
|
{
|
|
public bool ModifyText(StringBuilder sb, string text)
|
|
{
|
|
// #include "Packages/com.coffee.softmask-for-ugui/Shaders/SoftMask.cginc" // Add for soft mask
|
|
// #pragma shader_feature _ SOFTMASK_EDITOR // Add for soft mask
|
|
// #pragma shader_feature_local _ SOFTMASKABLE // Add for soft mask
|
|
if (text.Contains("/SoftMask.cginc\""))
|
|
{
|
|
var space = Regex.Match(text, @"^\s*").Value;
|
|
sb.AppendLine(text);
|
|
sb.Append(space).AppendLine("#pragma shader_feature _ SOFTMASK_EDITOR // Add for soft mask");
|
|
sb.Append(space).AppendLine("#pragma shader_feature_local _ SOFTMASKABLE // Add for soft mask");
|
|
return true;
|
|
}
|
|
|
|
// Remove the following line:
|
|
// #pragma shader_feature _ SOFTMASK_EDITOR // Add for soft mask
|
|
// #pragma shader_feature_local _ SOFTMASKABLE // Add for soft mask
|
|
if (Regex.IsMatch(text, @"#pragma.*\s*(SOFTMASK_EDITOR|SOFTMASKABLE)"))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
// color.a *= SoftMask(input.IN.vertex, IN.worldPosition);
|
|
// -> color.a *= SoftMask(input.IN.vertex, IN.worldPosition, color.a);
|
|
var match = Regex.Match(text, @"(\s*([^. \t]+).*\*=\s*SoftMask\(.*[^.][^a])\);.*$");
|
|
if (match.Success)
|
|
{
|
|
sb.Append(match.Groups[1].Value)
|
|
.Append(", ")
|
|
.Append(match.Groups[2].Value)
|
|
.AppendLine(".a); // Add for soft mask");
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
protected override string id => "Shader";
|
|
|
|
public static Modifier Create(string path)
|
|
{
|
|
var shader = AssetDatabase.LoadAssetAtPath<Shader>(path);
|
|
if (!shader || !shader.name.Contains("(SoftMaskable)")) return null;
|
|
|
|
return new SoftMaskableShaderModifier
|
|
{
|
|
path = path,
|
|
textModifiers = new ITextModifier[]
|
|
{
|
|
new ShaderModifier()
|
|
}
|
|
};
|
|
}
|
|
|
|
protected override bool RunModify(bool dryRun)
|
|
{
|
|
var modified = base.RunModify(dryRun);
|
|
if (!dryRun && modified)
|
|
{
|
|
AssetDatabase.ImportAsset(path);
|
|
}
|
|
|
|
return modified;
|
|
}
|
|
}
|
|
}
|