Well, this is old, and UnityGems doesnt open anymore, but I did find a backup of the site somewhere. So I was able to follow along your tutorials. I’m hoping someone is here to still help. I agree with Brian there, that site is great, needs to be reopened 
But anyway, Im on part 2 of the FSM tutorials. Followed along, writing my own code, until I came upon an error:
ArgumentException: method return type is incompatible
System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method, Boolean throwOnBindFailure) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Delegate.cs:190)
System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Delegate.cs:276)
StateMachineBase.ConfigureDelegate[Func`1] (System.String methodRoot, System.Func`1 Default) (at Assets/Scripts/FSM/StateMachineBase.cs:220)
StateMachineBase.ConfigureCurrentState () (at Assets/Scripts/FSM/StateMachineBase.cs:196)
StateMachineBase.set_currentState (System.Enum value) (at Assets/Scripts/FSM/StateMachineBase.cs:43)
FighterFSM.Idle_Update () (at Assets/Scripts/FSM/FighterFSM.cs:62)
StateMachineBase.Update () (at Assets/Scripts/FSM/StateMachineBase.cs:72)
Ive ended up copying and pasting the code, and Im still getting this error. Seems CreateDelegate doesnt like the EnterState or ExitState, and those are the only 2 coroutines. So theres a problem with the IEnumerator. Cutting out all Enter and ExitStates, the code will run fine. And thats what Ill end up with if no one can help.
Heres the code snippets…
private void ConfigureCurrentState()
{
...
Func<IEnumerator> enterState = ConfigureDelegate<Func<IEnumerator>>("EnterState", DoNothingCoroutine);
ExitState = ConfigureDelegate<Func<IEnumerator>>("ExitState", DoNothingCoroutine);
...
}
T ConfigureDelegate<T>(string methodRoot, T Default) where T : class
{
var mtd = GetType().GetMethod(_currentState.ToString() + "_" + methodRoot, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod);
if (mtd != null)
return Delegate.CreateDelegate(typeof(T), this, mtd) as T;
else
return Default;
}
If more than this is needed, Ill post the whole files, but I think its more in the system somewhere and Im not using CreateDelegate correctly for coroutines. Dont you hate it when the code changes and old tutorials dont work anymore?
Thanks in advance to whoever wants to help or point me off in the right direction.