我有一个着色器,它可以在材质上放置一个图案(来自纹理):
...
float2 patternxy = {_PatX, _PatY}; //_PatX & _PatY from inspector
float4 pattern = tex2D(_PatTex, i.uv + patternxy);
...
//adjust brightness depending on pattern strength and pattern map
if (all(pattern.rgb) == 1) { color.rgb += float3(_PatternStr, _PatternStr, _PatternStr); }
...
现在我想让图案在材质上滚动,因为我已经创建了一个脚本:
public class PatternMover : MonoBehaviour
{
new private Renderer renderer;
private WaitForSeconds wait;
[Range(0f, 1f)] public float delay = 0.1f;
[Range(0f, 0.5f)] public float step = 0.005f;
public bool ActX = true;
public float MulX = 1f;
public bool ActY = true;
public float MulY = 1f;
private void Awake()
{
renderer = GetComponent<Renderer>();
}
IEnumerator Start()
{
while (true)
{
wait = new WaitForSeconds(delay);
Move();
yield return wait;
}
}
private void Move()
{
if (ActX == true)
{
var x = renderer.material.GetFloat("_PatX");
if (x <= 128) { renderer.material.SetFloat("_PatX", x + step * MulX); } else renderer.material.SetFloat("_PatX", 0);
}
if (ActY == true)
{
var y = renderer.material.GetFloat("_PatY");
if (y <= 128) { renderer.material.SetFloat("_PatY", y + step * MulY); } else renderer.material.SetFloat("_PatY", 0);
}
}
}
这绝对没问题。我的问题是,我想在 VRChat Avatar 上使用此着色器,这意味着我无法上传自定义脚本。 那么有没有一种方法可以从着色器本身内部获得相同的效果,而无需额外的脚本?
提前致谢
我用另一种方式修复了它。我没有每次都修改变量,而是将 Unity 的 _Time 变量添加到 _PatX 和 _PatY 变量中...
float2 patxy = {_PatX + (_Time[2]/_TimeDec)*_PatSpdX, _PatY + (_Time[2]/_TimeDec)*_PatSpdY};
就这么简单。