You are passing to the parameter the result of a property or attribute from another class, which C# cannot guarantee if it is really constant at compile-time.
All optional parameters in C# must be constant at compile time.
As a workaround, you may do the following (saying out of my head, try it):
public static void Foo(Vector3 foo = new Vector3(0,0,0))
{
//...
}
or just initialize it inside the class (as Vector3 is nullable), such as:
public static void Foo(Vector3 foo = null)
{
if (foo == null) foo = Vector3.Zero;
//...
}
There's also a OptionalParameter class in .NET, which I'm not sure if works under MONO.