Hi,
Just shiming in. Niice advices here, thanks for sharing your experience.
But, I am not sure I agree that adding fsm equates to performance diminution. It's like saying adding a script decreases performances. It's how Unity component based system was designed from the ground up. I got the same assumption when I first jumped into Unity and PlayMaker, I wanted to have a conventional scripted approach to my development, but Unity and PlayMaker have very specific paradigms in the way they work, Unity is component based, PlayMaker is Fsm Based, so embrace this, and when you hit some performances issues along the development, you must bring on the table hard evidence that it's because you have too many Fsms.
you have to realize that it's not because it's visual development environment that it's heavy on the execution side, the two are separated. The Fsm core execution is deceptively simple, you can find some open source Fsm scripted in c# around, it's really not a big deal at all in terms of code foot print.
I think you should have a very different approach with this. First make the feature work, then optimize, if you start by worrying about your number of fsms, this is going to be problematic and you may actually end up doing very bad design pattern just because of this.
I am speaking of experience here, you'll find that 99% of projects will have problems with graphic performances and content management, not scripting. Use the wrong shaders and you loose 10FPS instantly... put some nice camera effect and you are doomed on mobile, too much meshes and content and your VR project is simply not fluid enough. I don't think you can then compare this to the impact of adding too many Fsms or components on a GameObject on the overall frame rate.
I have ported several projects from fully scripted to fully done in PlayMaker and I was always very positively surprised by the constance of PlayMaker in its footPrint. The latest is the Space Shooter UnityLearn Project for example (
https://github.com/jeanfabre/PlayMaker--UnityLearn--SpaceShooter_U5.5) and I published on webgl which is known to be the less performant platform, and the fps difference is 1 FPS with my test, pretty cool!
The usual mistake in blaming PlayMaker is for example using an action that in turns use a Unity api call that is known to have bad performances, for example FindGameObject. This is known to be a bad call, and you should really never use this in your game loop or abuse it, it's preferable to find gameobject by tag or to have a direct reference to it via sending an event to the interested fsm willing to work with that GameObject, etc etc. The same execution of finding a GameObject by its name without PlayMaker would lead to the same performance issue.
Bye,
Jean