Trying to change a range within a shader over time, using a script.

Hi guys,

I’m trying to change a range slider within a shader using a script, it needs to go from 0 - 1 and back again, over a period of time set by me. i’m aware that this would be a sin curve of time multiplied by my own variable.

But i’m stuck trying to get the script working, it throws an error back at me that i just don’t understand. the error is:
BCE0017: The best overload for the method ‘UnityEngine.Mathf.Sin(float)’ is not compatible with the argument list ‘System.Object, float)’.

This is probably something really simple that i’m missing due to lack of sleep, but i could really use a fresh set of eyes on this!

thanks guys!

the script:

        renderer.material.shader = Shader.Find("my_Shader");
        //gets the shader
    function Update () {
        // Animate the blend value
        var blend1 : float = Mathf.Sin (Time.Time, 1.0);
        renderer.material.SetFloat( "_Blend", blend1 );

Just a basic programing error – nothing to do with shaders, but the shader part is confusing you about the non-shader part.

Where it says Mathf.Sin(float) it’s telling you that sin takes one input. If you try it on your calculator, sure enough, you punch in 45, then Sin, and you get 0.707. One input.

It so happens that the value of Sin is always -1 to 1. If you want it to be from 0 to 1, you have to fix it afterwards. Suppose you wanted to compute x squared, but at most 10. You can’t write (x*x,<10). You’d probably use res=x*x; if(res>10) ...

The standard way to adjust Sin to a 0-1 is: Mathf.Sin(Time.time*speed)*0.5+0.5;. Speed is just any constant. It’s tricky, since Sin takes the angle in radians, which cycle every 6.28 . So speed=1/PI makes it go 0 to 1 in one second.